#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
答案 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)