假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子?请编程求解该问题。
依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn表示第n个月成兔对数,于是可得递推公式:
(n = 1) f1 = 1
(n = 2) f2 = 1
(n >= 3) fn = fn-1+fn-2
可由上述公式递推出每个月成兔对数为:1,1,2,3,5,8,13,21,34,55,89,144...即Fibonacci数列。
#include <stdio.h>
#include <stdlib.h>
#define N 12
void Fibonacci(int f[], int n);
int main()
{
int f[N], i;
Fibonacci(f, N);
printf("\nTotal = %d\n", f[N-1]);
return 0;
}
//计算并打印Fibonacci数列的前n项
void Fibonacci(int f[], int n)
{
int i;
f[0] = 1;
f[1] = 2;
for (i = 2; i < n; i++)
f[i] = f[i-1] + f[i-2];
for (i = 0; i < n; i++)
printf("%4d", f[i]);
}