首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 遞歸與迭代實現斐波那契數列:兔子繁殖問題

     編輯:Java 相關知識

問題背景

斐波那契數列源於兔子繁殖模型:第 1、2 月各 1 對,從第 3 月起每對成年兔每月產 1 對新兔。數列:1, 1, 2, 3, 5, 8, 13, 21...

遞歸實現(教學用,效率低)


public static int fibRec(int n) {
    if (n == 1 || n == 2) return 1;
    return fibRec(n-1) + fibRec(n-2); // 指數級重複計算
}

迭代實現(生產推薦,O(n) 時間,O(1) 空間)


public static long fibIter(int n) {
    if (n <= 2) return 1;
    long a = 1, b = 1;
    for (int i = 3; i <= n; i++) {
        long c = a + b;
        a = b;
        b = c;
    }
    return b;
}

動態規劃 / 記憶化遞歸


private static long[] memo = new long[100];
public static long fibMemo(int n) {
    if (n <= 2) return 1;
    if (memo[n] != 0) return memo[n];
    return memo[n] = fibMemo(n-1) + fibMemo(n-2);
}

矩陣快速冪 (O(log n))


// [F(n+1) F(n)  ]   [1 1]^n
// [F(n)   F(n-1)] = [1 0]
// 利用矩陣快速冪求第 n 項,適合超大 n

測試輸出前 20 項


for (int i = 1; i <= 20; i++) {
    System.out.println("F(" + i + ") = " + fibIter(i));
}

總結

方法時間空間適用場景
遞歸O(2^n)O(n)教學演示
迭代O(n)O(1)通用生產
記憶化遞歸O(n)O(n)遞歸思維+效率
矩陣快速冪O(log n)O(1)極大 n (n>10^9)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved