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

遞迴法求費波那契數列(C 語言版)

     編輯:關於C

費波那契數列定義

F₀ = 0, F₁ = 1, Fₙ = Fₙ₋₁ + Fₙ₋₂ (n ≥ 2)。序列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144... 注意:0 為第 0 項,非第 1 項。

遞迴實作


#include <stdio.h>
#include <stdlib.h>

int fib(int n) {
    if (n <= 1) return n;
    return fib(n-1) + fib(n-2);
}

int main() {
    int n;
    printf("請輸入要輸出多少項(自然數)費波那契數列:");
    scanf("%d", &n);

    for (int i = 0; i <= n; i++) {
        printf("%d, ", fib(i));
        if (i != 0 && i % 5 == 0) printf("\n");
    }
    printf("\n第 %d 項是:%d\n", n, fib(n));
    return 0;
}

執行範例 (n=30)


請輸入要輸出多少項(自然數)費波那契數列:30
0, 1, 1, 2, 3,
5, 8, 13, 21, 34,
55, 89, 144, 233, 377,
610, 987, 1597, 2584, 4181,
6765, 10946, 17711, 28657, 46368,
75025, 121393, 196418, 317811, 514229,
832040,
第 30 項是:832040

效能分析與改進

迭代版本範例 (O(n) 時間, O(1) 空間)


long long fib_iter(int n) {
    if (n <= 1) return n;
    long long a = 0, b = 1;
    for (int i = 2; i <= n; i++) {
        long long c = a + b;
        a = b; b = c;
    }
    return b;
}

總結

  • 遞迴寫法直觀但指數級複雜,僅適合教學或極小 n。
  • 實務上請使用迭代或矩陣快速冪。
  • C99 long long 可存至 F₉₂ (7540113804746346429),超過需用大整數庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法時間複雜度空間複雜度備註
朴素遞迴O(2ⁿ)O(n)大量重複計算
備忘錄遞迴O(n)O(n)陣列快取結果
迭代 (DP)O(n)O(1)僅保留前兩值
矩陣快速冪O(log n)O(1)大 n 最優