退出递归函数的顺序
#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);后的语句都会执行)
因为每次调用的函数都会运行到底才会返回。 本帖最后由 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. 递归问题可以画一下调用关系(递归工作栈), 问题就会清晰
初学递归问题会比较麻烦, 见多了, 分析多了以后就觉得容易了。 麻烦了,谢谢各位的帮忙。
页:
[1]