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

C 遞歸求和 1 + 1/2 + ... + 1/n:整數除法導致結果為 0 的經典錯誤

     編輯:程式設計綜合問答

遞歸函式 return fun(n-1) + 1/n; 中,1/n 為**整數除法**,當 n > 1 時結果恆為 0,導致總和永遠卡在 1.0。

修正方法

將至少一個運算元轉為浮點數:

double fun(int n) {
    if (n == 1) return 1.0;
    return fun(n-1) + 1.0 / n;  // 1.0 強制雙精度除法
}

驗證

int main() {
    printf("%.6f\n", fun(4)); // 1 + 0.5 + 0.333333 + 0.25 = 2.083333
    return 0;
}

延伸

  • 遞歸深度受限於堆疊,大 n 請改用迴圈疊加。
  • 若需高精度,可用 long double 或 Kahan 求和法減少誤差累積。

「整數除法截斷」是 C/C++ 初學者最常踩的坑之一,養成寫 1.0/n 或 (double)1/n 的習慣即可避免。

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