首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我是菜鸟小弟我想请问个递归有关问题

2012-03-27 
我是初学者我想请教个递归问题如下所述代码#include stdio.hvoid down(int)int main(void){down(1)ret

我是初学者我想请教个递归问题
如下所述代码
#include <stdio.h>
void down(int);
int main(void)
{
  down(1);

return 0;
}
void down(int num)
{
printf("Level %d: num location %p\n",num,&num);
if(num<4)
down(num+1);
printf("Level %d: num location %p\n",num,&num);
}

他的运行结果是:
Level 1: num location 0x0012ff34
Level 2: num location 0x0012ff24
Level 3: num location 0x0012ff14
Level 4: num location 0x0012ff04
Level 4: num location 0x0012ff04
Level 3: num location 0x0012ff14
Level 2: num location 0x0012ff24
Level 1: num location 0x0012ff34

这是书上的一个例子,但我还是没有理解为什么到第四级调用后,显示的结果会是逆向输出???麻烦各位能不能帮我讲解讲解??最好能详细点。谢谢了

[解决办法]

C/C++ code
if(num<4)    down(num+1);//他从这儿就进入下一个调用了,所以开始每次都输出的if上边的那句话
[解决办法]
当num=1,调用了down(1),先输出第一行,之后调用了down(1+1)即down(2)
当调用了down(2),就输出了第二行,之后调用了down(2+1)即down(3)
当调用了down(3),就输出了第三行,之后调用了down(3+1)即down(4)
当调用了down(4),就输出了第四行,此时传入的num=4,满足小于4的条件,所以继续输出第五行;
之后返回上一级的down(3)继续执行接下去的代码,,此时num=3,输出第六行
以此类推

递归就是在一个函数里又调用这个函数

热点排行