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

C語言經典筆試題:分數數列求和(斐波那契分數變體)

     編輯:關於C

經典 C 語言筆試題:求分數數列前 20 項之和。數列規律:分子分母均為斐波那契數列,前項分母為後項分子,前項分子+分母 = 後項分子。

題目描述

數列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13, ...
規律:
- 分子:2, 3, 5, 8, 13, 21... (斐波那契)
- 分母:1, 2, 3, 5, 8, 13... (斐波那契錯位)
- 遞推:新分子 = 舊分子 + 舊分母;新分母 = 舊分子
求前 20 項和。

代碼實現

#include 

int main() {
    float numerator = 2.0f;   // 分子
    float denominator = 1.0f; // 分母
    float sum = 0.0f;
    int i = 0;
    float temp;

    while (i < 20) {
        sum += numerator / denominator;  // 累加當前項

        // 遞推下一項
        temp = numerator;
        numerator = numerator + denominator; // 新分子 = 舊分子 + 舊分母
        denominator = temp;                  // 新分母 = 舊分子

        i++;
    }

    printf("前20項和: %g\n", sum);
    return 0;
}

運行結果

前20項和: 32.6603

關鍵邏輯解析

數學洞察

該數列第 n 項為 F(n+2) / F(n+1),其中 F 為斐波那契數列(F1=1, F2=1)。

極限值趨近黃金分割比 φ = (1+√5)/2 ≈ 1.618034。

前 20 項和 ≈ 32.6603,隨項數增加,平均項值趨近 φ,總和約為 n×φ。

常見陷阱與優化

  • 整數除法截斷:必須用 float/double 存儲分子分母或強制類型轉換 (float)num/den。
  • 變量更新順序:需用臨時變量保存舊分子,否則分母更新會用到新分子值導致錯誤。
  • 精度考慮:double 精度更高,長數列建議使用。
  • 遞歸 vs 迭代:迭代 O(1) 空間,遞歸 O(n) 棧空間且重複計算,此題必用迭代。

總結

此題考察:

  1. 模式識別:快速發現斐波那契遞推關係。
  2. 變量遞推:正確處理臨時變量交換更新。
  3. 類型選擇:浮點數避免整除截斷。
  4. 邊界控制:循環 20 次精確終止。

掌握「舊值暫存 → 計算新值 → 更新變量」的標準遞推模板,可靈活應對各類數列求和、遞推關係筆試題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
步驟分子分母當前項值累積和
1212.0000002.000000
2321.5000003.500000
3531.6666675.166667
4851.6000006.766667
51381.6250008.391667
...............
2017711109461.61803432.6603