C primer plus
第9章:
递归......有点难理解,尾递归还好,常规的递归真的很难理解。
#include
void up_and_down(int);
int main(void)
{
up_and_down(1);
return 0;
}
void up_and_down(int n)
{
printf("Level %d: n location %pn",n,&n);
if (n < 3)
up_and_down(n+1);
printf("LEVEL %d: n location %pn",n,&n);
}
根据这条程序,输出的结果为
Level 1: n location 0x7ffdbc113dac #1
Level 2: n location 0x7ffdbc113d8c #2
Level 3: n location 0x7ffdbc113d6c #3
LEVEL 3: n location 0x7ffdbc113d6c #4
LEVEL 2: n location 0x7ffdbc113d8c #5
LEVEL 1: n location 0x7ffdbc113dac #6
1~4条的输出结果很好理解。但5~6条的无法理顺。姑且理解为递归的规律,可以这样解释。
因为在主函数中调用函数 n的值1,但当输出第4条语句时 由于up_and_down函数直接调用了直接,n变成了3,所以当函数自身调用结束后,控制权返回给了主函数,所以n的值需要变成1,所以n值为2,打印LEVEL 2, n值为1 打印LEVEL 1. 还是无法理解。。。希望后续学到二叉树时可以发现其中的规律。。



