兔子生兔子問題(斐波那契數列)

兔子生兔子問題(斐波那契數列)


題目:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子。假如兔子都不死,要求輸出一年內兔子的數量是多少。

1 1 2 3 5 8……

代碼如下

//兔子問題(斐波那契)
public class HomeWork05 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int month = 12;
        int sum = fab(month);
        System.out.println(sum);
        System.out.println(fab_1(month));
    }
    static int fab(int month){
        if(month<=2)
            return 1;
        else if(month==3)
            return 2;
        else
            return 2*fab(month-1)-fab(month-3);
//          return fab(month-1) +(fab(month-1)-fab(month-2)) +(fab(month-2)-fab(month-3));
//          返回值爲,上月兔子數   +       上月增加的兔子數       +      兩個月前新增兔子數
    }
    static int fab_1(int n){
        if(n<=2) return 1;
        else return fab_1(n-1)+ fab_1(n-2);
    }
}

用遞歸法求解最簡單,上面代碼fab()是根據題意寫出的代碼。由於兔子第三個月開始會生小兔子,所以此道題目的關鍵邏輯是:

本月兔子數=上月兔子數 + 上月增加的兔子數 + 兩個月前新增兔子數,

即:fab(n) = fab(n-1) +(fab(n-1)-fab(n-2)) + (fab(n-2)-fab(n-3));

亦即:fab(n)=2*fab(n-1) - fab(n-3)

這一邏輯較斐波那契數列更好理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章