首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

用 C 語言驗證費波那契數列比值趨近黃金分割率

     編輯:程式設計綜合問答

問題背景

費波那契數列中,相鄰兩項的比值 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…,驗證了費波那契數列與黃金分割率的關係。

優化建議

  • 遞歸效率低:當前遞歸實現重複計算量大(O(2^n)),實際項目中建議改用迭代或動態規劃(O(n))。
  • 整數溢出:int 型別僅能支援到第 46 項,需用 long long 或大數庫擴展範圍。
  • 輸入輸出增強:可加入 scanf 讓用戶指定計算項數,提升互動性。

數學延伸

黃金分割率 φ = (√5 - 1)/2 ≈ 0.618,滿足 φ² + φ - 1 = 0。費波那契數列通項公式(Binet 公式)為:
F(n) = (φⁿ - (-φ)⁻ⁿ) / √5
由此可嚴格證明 lim(n→∞) F(n)/F(n+1) = φ。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved