你能解释一下递归吗?

时间:2014-01-25 19:28:04

标签: c recursion

    #include <stdio.h>

    int main()
    {
        reverse(1);
        return 0;
    }

    void reverse(int i)
    {
        if (i > 5)
            exit(0);

        printf("%d\n", i);
        return reverse(i++);
    }

这种递归是如何起作用的?

当我运行时,1无限打印。我希望输出为12345

3 个答案:

答案 0 :(得分:5)

++运算符变量之后,它执行“后增量”操作,因此当它在丢弃之前递增i变量时, > expression 结果是i原始值,因此每次调用该函数都具有相同的值。

答案 1 :(得分:1)

您使用i++递增i但在表达式中使用它的原始值。

int a=0   
int b=a++; // a is 1, b is 0
int c=++a; // a and c is 2
int d=a+1; // a is 2 and not changed, d is 3

当你进行递归时,你应该尽量不改变变量,因为它是不必要的。

void reverse(int i)
{
    if (i > 5)
       return;           // instead of exit you could use return.

    printf("%d\n", i);
    return reverse(i+1); // changed from i++ to i+1
}

答案 2 :(得分:1)

每次离开递归函数时,i的值保持为1,因为您正在使用后递增运算符。改用(i + 1)