递归函数行为

时间:2014-11-26 15:51:43

标签: c function recursion

计划1:

无法打印任何内容,即使我们通过字符串s

void reverse(char *s)
{
    if(*s)
    {
        return reverse(s+1); 
        printf("%c",*s);
    }
}

计划2:

作为精确行为,它以相反的顺序打印字符串。

void reverse(char *str)
{
    if(*str)
    {
        reverse(str+1);
        printf("%c", *str);
    }
}
任何人都知道,程序1会出现什么问题。
我认为,在递归函数中,我们应该在函数之前加上 return 语句。是否必须把return语句/必要的??。

2 个答案:

答案 0 :(得分:2)

这与递归无关。 printf语句是死代码,由于与

相同的原因而无法工作
int main()
{
  return 0;
  printf("hello, world");
}

不起作用。您应该获得此类代码的编译器警告。

此外,您的递归函数需要一个停止调用自身的条件,否则它将无限地生成新函数,直到您获得堆栈溢出。

答案 1 :(得分:0)

在第一个程序中有return语句退出函数而不打印任何东西。也就是说,函数以递归方式调用自身,并在每次递归时立即将控制权返回给调用者。控制从未达到印刷声明。

实际上该功能可以像

一样重写
void reverse(char *s)
{
    if(*s)
    {
        return reverse(s+1); 
    }
}