我试图了解递归是如何工作的。我似乎不明白这个多次递归是如何工作的。请帮助和谢谢!
#include<stdio.h>
int R(int x);
int main()
{
R(5);
return 0;
}
int R(int x)
{
if(x > 0){
x--;
R(x);
R(x - 2);
printf("%d ", x);
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
R(5)
调用R(4)
会显示某些内容,然后R(2)
会显示某些内容。之后R(5)
显示4
。这就是你在输出结尾看到4的原因。
R(4)显示 - R(2)显示 - 4
在4之前,您显示R(2)
。 R(2)
调用R(1)
显示somenthing,然后R(0)
显示任何内容。 R(2)
显示1
。这就是为什么你最后有一个1,就在4之前。
R(4)显示 - R(1)显示 - R(0)显示 - 1 4
等等......
R(4)显示 - R(1)显示 - 1 4
R(4)显示 - 0 1 4
您始终从结尾(右侧第一个)开始处理R()显示调用。
正如您所看到的,递归将反转数字的顺序(4,最大数字,是最后一个)。这是因为在递归调用R之后你有printf
。