c++从零开始---递归

函数可以调用自身,这种功能称为递归。递归可以有只包含一个递归的递归,也可以包含多个递归。也就是在运行一次函数时,调用一次自身或是多次。

1、包含一个递归调用的递归

通常的格式是将递归调用放在 if 语句中,这样递归才可以判断是否结束递归循环调用:

void recurs(arguments)
{
	statements1
	if (test)
		recurs(arguments)
	statements2
}

test 最终为 FALSE,调用链断开。

在以上程序格式中,递归调用将导致执行 n 次 statements1 后,程序沿进入的路径返回执行 n 次 statements2。
比如执行两次递归调用,第三次时,test 为 FALSE,程序将执行 statements2,执行完该语句后,程序实际上是在第二层的递归调用里,接下来将继续执行 statements2,然后程序进入到第一层的递归调用,再次执行 statements2,总共执行 3 次。与递归调用进入该递归循环执行 statements1 的次数一样,并且顺序相反。

下列程序将展示该特性:

#include <iostream>
void countdown(int n);

int main()
{
	countdown(4);
	return 0;
}

void countdown(int n)
{
	using namespace std;
	cout << "Counting down ... " << n << endl;
	if (n > 0)
	{
		countdown(n - 1); // 递归调用,这里是调用 5 次
	}
	cout << n << ": kaboom!\n";
}

注意:每个递归调用都创建自己的一套变量,因此当程序到达第 5 次调用时,将有 5 个独立的 n 变量,其中每个变量的值不同,并且地址也不同。

2、包含多个递归调用的递归

参照《c++ premier plus 第六版》 p198。略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值