#include <stdio.h>
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 %p \n", n, &n); // #1
if (n < 4) {
up_and_down(n + 1);
}
printf("Level %d: n location %p \n", n, &n); // #2
}
执行结果:
Level 1: n location 00CFF680
Level 2: n location 00CFF5A8
Level 3: n location 00CFF4D0
Level 4: n location 00CFF3F8
Level 4: n location 00CFF3F8
Level 3: n location 00CFF4D0
Level 2: n location 00CFF5A8
Level 1: n location 00CFF680
分析:
首先, main()调用了带参数1的up_and_down()函数, 执行结果是up_and_down()中的形参n的值是1,所以打印语句#1打印Level 1,然后,由于n小于4, up_and_down()调用实参为n + 1的up_and_down(),于是第二级调用中的值是2,打印语句#1打印Level 2, 依次类推。
当执行到第4级时, n的值是4, 所以if测试条件为假,up_and_down()函数不再调用自己, 第4级调用接着执行打印语句#2,即打印Level4,因为n的值是4,此时第4级调用结束, 控制被传回它的主调函数,并回到第3级调用,因为在第3级调用中,执行的最后一条语句是调用if语句中的第4级调用,第3级调用继续执行后面的代码,打印语句#2打印Level3。然后第3级调用结束,控制被传回第2级调用,接着打印Level2,依次类推。
来自《c primer plus》