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

C語言實現泰勒公式求 e 值:階乘遞推與精度控制

     編輯:關於C

題目

利用泰勒展開 e = 1 + 1/1! + 1/2! + 1/3! + ...,直到 1/n! < 10^-7 停止,輸出 e 的近似值。

方法一:獨立階乘函式(直觀但重複計算)


#include 

int factorial(int n) {
    int res = 1;
    for (; n > 0; n--) res *= n;
    return res;
}

int main() {
    double e = 1.0;
    for (int n = 1; 1.0 / factorial(n) >= 1e-7; n++)
        e += 1.0 / factorial(n);
    printf("%lf\n", e);
    return 0;
}

缺點:每項重新計算階乘,時間複雜度 O(n²)。

方法二:遞推累積階乘(線性時間,推薦)


#include 

int main() {
    double e = 1.0;
    double fact = 1.0; // 0! = 1
    for (int n = 1; 1.0 / fact >= 1e-7; n++) {
        fact *= n;      // n! = (n-1)! * n
        e += 1.0 / fact;
    }
    printf("e = %lf\n", e);
    return 0;
}

運行結果

e = 2.718282

關鍵點

  • 遞推關係 n! = n * (n-1)! 將複雜度從 O(n²) 降至 O(n)。
  • 停止條件 1/n! < 1e-7 等價於 n! > 1e7,約 n=10 時滿足。
  • double 足夠精度;若需更高精度可用 long double 或高精度庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved