递归函数执行顺序
#include<stdio.h>void updown (int);int main(void){ updown(1); }void updown (int n){ printf("%d,%p\n",n,&n); if(n<4) updown(n+1);printf("%d,%p\n",n,&n);/*这句话打印结果为什么是4,3,2,1的顺序*/}为什么执行后的结果是
10018FEF4
20018FE9C
30018FE44
40018FEEC
40018FEEC
30018FE44
20018FE9C
10018FEF4
1,2,3,4的顺序我明白,但是不知道为什么又有4,3,2,1的输出,我以为只会输出1,2,3,4.
递归是 一次次的调用自己 然后 最后的调用的 第一个结束 然后 依次这样,。 我知道是一次次的调用自己,为什么调用完成后会把之前调用时产生的N值都打印出来,为什么不是打印到1,2,3,4,4,就结束了,还有3,2,1的打印呢
当打印到1,2,3,4时第4次调用的updown()先退出打印4,此时先前3次调用updown()还未退出,仍在栈中,然后按后进先出依次退出打印3,2,,1 谢谢回复,懂了。
页:
[1]