zhumengyun 发表于 2014-8-12 14:30:37

退出递归函数的顺序

#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的顺序*/
printf("***\n");       /*为什么在推出递归的过程中也会执行这一句*/
}
结果是
10018FEF4
20018FE9C
30018FE44
40018FEEC
40018FEEC
***
30018FE44
***
20018FE9C
***
10018FEF4
***
为什么在推出递归时,会执行printf("***\n");语句呢,(事实上printf("%d,%p\n",n,&n);后的语句都会执行)

章伯魂 发表于 2014-8-12 20:57:28

因为每次调用的函数都会运行到底才会返回。

Cmpt 发表于 2014-8-13 10:48:30

本帖最后由 Cmpt 于 2014-8-13 10:49 编辑

#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); /* 程序如果能走到这里, 说明n = 4。 所以,先打印4 */
      printf("***\n");               /*这一句是接近着上一个printf打印的*/
}

提一下问题:
1. 代码不规范, 给你解决问题的人读起来费劲
2. 递归问题可以画一下调用关系(递归工作栈), 问题就会清晰

初学递归问题会比较麻烦, 见多了, 分析多了以后就觉得容易了。

zhumengyun 发表于 2014-8-16 19:16:02

麻烦了,谢谢各位的帮忙。
页: [1]
查看完整版本: 退出递归函数的顺序