先贴下代码吧。
#include<stdio.h>
int main(void)
{
up(1);
return 0;
}
void up(int n)
{
printf("rank1 %d: location %p\n", n, &n );
if (n < 4)
up(n+1);
printf("rank2 %d: location %p\n", n, &n );
}
rank1 1: location 0029FEA0
rank1 2: location 0029FE80
rank1 3: location 0029FE60
rank1 4: location 0029FE40
rank2 4: location 0029FE40 //之前认为到这一步就结束了,为什么会有接下去的3个输出
rank2 3: location 0029FE60
rank2 2: location 0029FE80
rank2 1: location 0029FEA0
不明白的地方就是:程序不能直接返回到main()中的初始调用部分吗?是因为递归的存在而导致的每一级逐步返回吗?为什么会出现4-->1的输出呢
我觉得可以按照这种方式来分析:
不知道你有没有意识到问题,就是你之前的分析是假设up(4)在返回的时候是回到main()的,但实际上是返回到上一层,即up(3)。up(3)会接着执行调用up(4)的语句之后的部分,因此会打印出rank2的内容。