假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子?请编程求解该问题。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
#include <stdio.h>
int rabbit(int n)
{
if (1 == n || 2==n)
return 1;
else if (n >= 3)
return rabbit(n - 1) + rabbit(n - 2);
else
return -1;
}
int main()
{
int i,sum=0;
int array[13];
for (i = 1; i <=12; i++)
{
array[i] = rabbit(i + 1);
printf("%4d", array[i]);//递归调用
//sum += array[i];
}
sum = array[12];
printf("\nTotal=%d\n", sum);
return 0;
}