兔子生崽问题
13世纪意大利数学家Fibonacci在其所著的《算盘全集》一书中借助“兔子生崽”问题引入了一个著名的递推数列,即Fibonacci数列。
”兔子生崽“问题是采自民间的一道算题,问题的描述是这样的:”假设一对小兔的成熟期是一个月,即一个月可长成大兔子,那么,如果每对大兔子每个月都可以生一对兔子,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可以有多少对兔子?“
深入观察还可以发现其中的变化:
1.小兔对数和大兔的对数构成两个相同的数列,不过小兔对数数列向后推迟了一个月,因为上个月有几对大兔子,这个月就应有几对小兔,即每月小兔对数=上月大兔对数
2.每月大兔对数=上个月大兔对数+上个月小兔对数
于是就有:
f(1)=1 n=1
f(2)=1 n=2
f(n)=f(n-1)+f(n-2) n>=3
编写的程序一如下:
#include
#define YEAR 12
int main()
{
int f[YEAR+1]={0,1,2};//1月和2月兔子对数分别初始化为1,2,不使用f[0]
int month;
for(month=3;month<=YEAR;month++)//从3月份开始计算每个月总兔数
{
f[month]=f[month-1]+f[month-2];
}
for(month=1;month<=YEAR;month++)//输出12个月的总兔对数
{
printf("%d