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

Java 實作費波那契數列:陣列迭代法完整範例

     編輯:Java 相關知識

費波那契數列定義

F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2) (n≥2)。常見變體為 1,1,2,3,5,8…(省略首項 0)。

迭代陣列實作(O(n) 時間、O(n) 空間)


public class FibonacciDemo {

    public static void main(String[] args) {
        printFibonacci(10); // 列印前 10 項
    }

    public static void printFibonacci(int count) {
        if (count <= 0) return;

        int[] fib = new int[count];
        fib[0] = 1;
        if (count > 1) fib[1] = 1;

        for (int i = 2; i < count; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }

        for (int n : fib) {
            System.out.print(n + " ");
        }
        System.out.println();
    }
}

執行結果


1 1 2 3 5 8 13 21 34 55

進階優化方向

版本時間複雜度空間複雜度備註
遞迴O(2^n)O(n)重複計算極多,教學用
陣列迭代O(n)O(n)本文範例,易讀
兩變數滾動O(n)O(1)只保留前兩項,生產環境首選
矩陣快速冪O(log n)O(1)極大 n 時使用

滾動變數 O(1) 空間版本


public static void printFibonacciO1(int count) {
    if (count <= 0) return;
    int a = 1, b = 1;
    System.out.print(a + " ");
    if (count == 1) return;
    System.out.print(b + " ");
    for (int i = 2; i < count; i++) {
        int c = a + b;
        System.out.print(c + " ");
        a = b;
        b = c;
    }
    System.out.println();
}

大數處理提示

第 47 項起超過 int 上限,第 93 項超過 long,實務上請改用 BigInteger:


BigInteger a = BigInteger.ONE, b = BigInteger.ONE;
for (int i = 2; i < count; i++) {
    BigInteger c = a.add(b);
    a = b; b = c;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved