兔子繁殖问题:题目描述
有一只兔子,从出生后第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);
}
递归的优缺点:
**优点:**递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),
**缺点:**但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。