兔子繁衍問題(斐波那契數列)
阿新 • • 發佈:2019-01-26
兔子繁衍問題(15 分)
一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對?
輸入格式:
輸入在一行中給出一個不超過10000的正整數N。輸出格式:
在一行中輸出兔子總數達到N最少需要的月數。輸入樣例:
30
輸出樣例:
9
其實去列一下前面幾個月兔子的數量就會發現,從第三個月開始,下一個月兔子的總數就為上兩個月兔子總數的和。其實這個數列是一個金典演算法題。而這種數列稱為斐波那契數列。
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>2,n∈N*)。這個數列從第3項開始,每一項都等於前兩項之和。
非遞迴C++程式碼實現如下:
#include<iostream>
using namespace std;
int main(void)
{
int n, sum, cnt, v1, v2;
sum = cnt = 1; //cnt表示過了幾個月,sum為兔子總數
v1 = v2 = 0;
cin >> n;
if(n > 1) { //n至少是大於等於2的數,若為1,則直接輸出cnt,即1
while(sum < n) {
v1 = v2;
v2 = sum;
sum += v1;
cnt ++;
}
}
cout << cnt << endl;
return 0;
}