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
}