老問題新解法——經典的大兔子生小兔子問題(斐波那契數列)
阿新 • • 發佈:2019-02-17
問題描述:從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數為多少?
程式分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
解決方案1:
思想方法:某月的兔子數量即為上個月的兔子數量+上個月出生的兔子數量,而出生的兔子數量即上個月的大兔子數量,也即上上月的兔子數量(上上月的兔子到了上個月一定會成為大兔子,一定會生兔子寶寶)。所以很明顯兔子數量為斐波那契數列,下面只需要用程式碼計算斐波那契數列即可。
核心程式碼:
public static int recurse(int month){
if(month==1||month==2)
temp=1;
if(month>2)
temp=recurse(month-1)+recurse(month-2);
//System.out.println("temp="+temp);
return temp;
}
如果我們沒有數學基礎怎麼辦,不會分析,不知道斐波那契數列怎麼辦?沒關係,可以這樣思考
解決方案2:
思想方法:雖然不知道斐波那契數列,但是我們如果知道某個月的大兔子小兔子兩者的數量,一定可以知道下個月的大兔子小兔子數量,所以我們可以通過N次這個過程,計算出任何一個月的大小兔子數量。
核心程式碼:
while(month>0){
int temp=small;//先儲存small即小兔子的數量,因為小兔子數量一會會變化
small=big;
big=big+temp;
month--;
}