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

C語言階乘計算與求和:三種迴圈實作方式比較

     編輯:關於C

單一數階乘

// 遞減迴圈
int factorial1(int n) {
    for (int i = n-1; i > 0; i--) n *= i;
    return n;
}

// 遞迴(教學用,非生產環境推薦)
int factorial_rec(int n) {
    return n <= 1 ? 1 : n * factorial_rec(n-1);
}

1! + 2! + ... + 10! 三種求和法

方法一:雙層迴圈(直觀但重複計算)

int sum1() {
    int sum = 0;
    for (int a = 1; a <= 10; a++) {
        int fact = 1;
        for (int b = 1; b <= a; b++) fact *= b;
        sum += fact;
    }
    return sum;
}

方法二:單層迴圈累積(最佳,O(n))

int sum2() {
    int sum = 0, fact = 1;
    for (int i = 1; i <= 10; i++) {
        fact *= i; // 利用上一輪結果
        sum += fact;
    }
    return sum;
}

方法三:遞迴求和(教學示範)

int fact_rec(int n) { return n<=1?1:n*fact_rec(n-1); }
int sum_rec(int n) { return n<=1?1:sum_rec(n-1)+fact_rec(n); }

效能比較

方法時間複雜度特點
雙層迴圈O(n²)重複計算階乘
單層累積O(n)**最佳**,動態規劃思想
遞迴O(n²)函式呼叫開銷大,堆疊風險

完整程式碼

#include 

int main() {
    // 單層累積法示範
    int sum = 0, fact = 1;
    for (int i = 1; i <= 10; i++) {
        fact *= i;
        sum += fact;
        printf("%d! = %d, Sum = %d\n", i, fact, sum);
    }
    printf("Final 1!+...+10! = %d\n", sum);
    return 0;
}

總結

階乘求和的關鍵在於**重用前一次計算結果**(`fact *= i`),將 O(n²) 降為 O(n)。這是動態規劃/遞推思想的最簡單體現:保存狀態,避免重複計算。

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