1. 程式人生 > >老問題新解法——經典的大兔子生小兔子問題(斐波那契數列)

老問題新解法——經典的大兔子生小兔子問題(斐波那契數列)

問題描述:從出生後第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--;
   }