假設(shè)一對(duì)小兔的成熟期是一個(gè)月而昨,即一個(gè)月可長(zhǎng)成成兔,那么如果每對(duì)成兔每個(gè)月都可以生一對(duì)小兔吩坝,一對(duì)新生的小兔從第二個(gè)月起就開(kāi)始生兔子驾诈,試問(wèn)從一對(duì)兔子開(kāi)始繁殖缠诅,一年以后可有多少對(duì)兔子?請(qǐng)編程求解該問(wèn)題乍迄。
依題意管引,兔子的繁殖情況如圖所示。圖中實(shí)線表示成兔仍是成兔或者小兔長(zhǎng)成成兔就乓;虛線表示成兔生小兔汉匙。觀察分析此圖可發(fā)現(xiàn)如下規(guī)律:
(1)每月小兔對(duì)數(shù) = 上個(gè)月成兔對(duì)數(shù)拱烁。
(2)每月成兔對(duì)數(shù) = 上個(gè)月成兔對(duì)數(shù) + 上個(gè)月小兔對(duì)數(shù)。
綜合(1)和(2)有:每月成兔對(duì)數(shù) = 前兩個(gè)月成兔對(duì)數(shù)之和噩翠。
兔子繁殖.png
用fn表示第n個(gè)月成兔對(duì)數(shù)戏自,于是可得遞推公式:
(n = 1) f1 = 1
(n = 2) f2 = 1
(n >= 3) fn = fn-1+fn-2
可由上述公式遞推出每個(gè)月成兔對(duì)數(shù)為:1,1,2,3,5,8,13,21,34,55,89,144...即Fibonacci數(shù)列。
#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;
}
//計(jì)算并打印Fibonacci數(shù)列的前n項(xiàng)
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]);
}