我是初学者我想请教个递归问题
如下所述代码
#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,输出第六行
以此类推
递归就是在一个函数里又调用这个函数