递归——兔子繁殖问题

兔子繁殖问题:题目描述
有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

输入描述:
输入int型表示month

输出描述:
输出兔子总数int型

基本思路:
这是一个递归问题,从第一个月开始每个月兔子的数目为:1,1,2,3,5,8,13…,可以看出从第三个月开始,每个月兔子的数目是前两个月兔子的数目的和,用数学表示为F(month)
= F(month-1)+F(month-2)。

C语言递归算法

/*兔子繁殖问题
    本题来自于一个有趣的古典数学问题:
	有一对兔子,从出生后的第3个月起每个月都生一对兔子。
	小兔子长到第3个月又生一对兔子。
	如果生下的所有兔子都能成活,且所有的兔子都不会因年龄大而老死,
	问每个月的兔子总数为多少?
*/
#include<stdio.h>
#include<stdlib.h> 
int main()
{
	int month;
	int rabbit(int);
	printf("请输入第几个月数:\n");
	scanf("%d",&month);
	rabbit(month);
	printf("第%d月的兔子总数为:%d\n",month,rabbit(month));
	system("pause");
	return 0;
	
	
}
int rabbit(int month)
{
	if(month==1||month==2)
	return 1;
	else
	return rabbit(month-1)+rabbit(month-2);
	
} 

递归的优缺点:

**优点:**递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),
**缺点:**但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值