費波那契數列中,相鄰兩項的比值 Fn / Fn+1 隨 n 增大而趨近黃金分割率 φ ≈ 0.6180339887。本文提供一個完整的 C 語言程序,演示如何通過遞歸計算數列並輸出比值變化,驗證此數學特性。
#include <stdio.h>
// 遞歸計算第 n 項費波那契數
int fib(int n) {
if (n == 1 || n == 2) return 1;
return fib(n - 1) + fib(n - 2);
}
int main() {
printf("n\tF(n)\tF(n+1)\tRatio F(n)/F(n+1)\n");
for (int i = 1; i < 20; i++) {
int fn = fib(i);
int fn1 = fib(i + 1);
double ratio = (double)fn / fn1;
printf("%d\t%d\t%d\t%.10f\n", i, fn, fn1, ratio);
}
return 0;
}
程序輸出前 19 項比值:
n F(n) F(n+1) Ratio F(n)/F(n+1) 1 1 1 1.0000000000 2 1 2 0.5000000000 3 2 3 0.6666666667 4 3 5 0.6000000000 5 5 8 0.6250000000 6 8 13 0.6153846154 7 13 21 0.6190476190 8 21 34 0.6176470588 9 34 55 0.6181818182 10 55 89 0.6179775281 11 89 144 0.6180555556 12 144 233 0.6180257511 13 233 377 0.6180371353 14 377 610 0.6180327869 15 610 987 0.6180344478 16 987 1597 0.6180338134 17 1597 2584 0.6180340557 18 2584 4181 0.6180339632 19 4181 6765 0.6180339985
可見隨 n 增加,比值快速收斂至 0.6180339887…,驗證了費波那契數列與黃金分割率的關係。
int 型別僅能支援到第 46 項,需用 long long 或大數庫擴展範圍。scanf 讓用戶指定計算項數,提升互動性。黃金分割率 φ = (√5 - 1)/2 ≈ 0.618,滿足 φ² + φ - 1 = 0。費波那契數列通項公式(Binet 公式)為:F(n) = (φⁿ - (-φ)⁻ⁿ) / √5
由此可嚴格證明 lim(n→∞) F(n)/F(n+1) = φ。