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;
}
請輸入要輸出多少項(自然數)費波那契數列: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(2ⁿ) | O(n) | 大量重複計算 |
| 備忘錄遞迴 | O(n) | O(n) | 陣列快取結果 |
| 迭代 (DP) | O(n) | O(1) | 僅保留前兩值 |
| 矩陣快速冪 | O(log n) | O(1) | 大 n 最優 |