遞歸函式 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 的習慣即可避免。