zhumengyun 发表于 2014-8-12 13:14:27

递归函数执行顺序

#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.


Angel丶L 发表于 2014-8-12 13:22:21

递归是 一次次的调用自己 然后 最后的调用的 第一个结束 然后 依次这样,。

zhumengyun 发表于 2014-8-12 14:11:22

我知道是一次次的调用自己,为什么调用完成后会把之前调用时产生的N值都打印出来,为什么不是打印到1,2,3,4,4,就结束了,还有3,2,1的打印呢

向阳 发表于 2014-8-12 14:37:25

当打印到1,2,3,4时第4次调用的updown()先退出打印4,此时先前3次调用updown()还未退出,仍在栈中,然后按后进先出依次退出打印3,2,,1

zhumengyun 发表于 2014-8-12 15:47:48

谢谢回复,懂了。
页: [1]
查看完整版本: 递归函数执行顺序