Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 你能给我解释一下递归吗? #包括 int main() { 反面(1); 返回0; } 无效反向(int i) { 如果(i>5) 出口(0); printf(“%d\n”,i); 反向返回(i++); }_C_Recursion - Fatal编程技术网

C 你能给我解释一下递归吗? #包括 int main() { 反面(1); 返回0; } 无效反向(int i) { 如果(i>5) 出口(0); printf(“%d\n”,i); 反向返回(i++); }

C 你能给我解释一下递归吗? #包括 int main() { 反面(1); 返回0; } 无效反向(int i) { 如果(i>5) 出口(0); printf(“%d\n”,i); 反向返回(i++); },c,recursion,C,Recursion,这个递归是如何工作的 当我运行时,1被无限打印。我希望输出是12345当++操作符在变量后面时,它会执行“后增量”运算,因此,当它在丢弃变量之前增加I变量时,表达式结果是I的原始值,因此每次调用函数时都使用相同的值。您使用的是递增i但在表达式中使用其原始值的i++ #include <stdio.h> int main() { reverse(1); return 0; } void reverse(int

这个递归是如何工作的


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

++
操作符在变量后面时,它会执行“后增量”运算,因此,当它在丢弃变量之前增加
I
变量时,表达式结果是
I
的原始值,因此每次调用函数时都使用相同的值。

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

    #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++);
    }
在执行递归时,应该尽量不要对变量进行变异,因为这是不必要的

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

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

返回反向(++i)
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
}