递归,说来简单,理解还是比较难的。

7 篇文章 0 订阅
#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》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值