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

C語言計算階乘:for 循環與 while 循環兩種實現對比

     編輯:關於C語言

C語言計算階乘:for 循環與 while 循環兩種實現對比

方法一:for 循環

#include <stdio.h>

int main() {
    int i = 0;
    long long result = 1; // 使用 long long 防止溢出 (13! > 2^31)
    for (i = 1; i <= 5; i++) {
        result *= i;
    }
    printf("5! = %lld\n", result); // 輸出 120
    return 0;
}

特點:初始化、條件判斷、迭代更新三要素集中在 for 括號內,結構清晰,適合已知循環次數的場景。

方法二:while 循環

#include <stdio.h>

int main() {
    int i = 1;
    long long result = 1;
    while (i <= 5) {
        result *= i;
        i++;
    }
    printf("5! = %lld\n", result); // 輸出 120
    return 0;
}

特點:條件判斷與循環體分離,初始化和更新在循環外/內手動控制,靈活適合未知循環次數或複雜終止條件。

關鍵差異對比

維度for 循環while 循環
適用場景循環次數確定、計數器驅動條件驅動、次數不確定
變量作用域C99 允許循環內聲明計數器 (作用域限於循環)計數器通常聲明在外部
可讀性三要素聚合,一目瞭然邏輯分散,需仔細檢查更新語句
常見錯誤分號誤放導致空循環體忘記更新條件變量導致死循環

進階考慮:數據類型選擇

  • int (通常 32 位):最大 12! = 479,001,600 (13! 溢出)。
  • long long (64 位):最大 20! = 2,432,902,008,176,640,000 (21! 溢出)。
  • 超大階乘需用大整數庫 (如 GMP) 或數組/鏈表模擬高精度運算。

遞歸實現 (補充)

long long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

遞歸代碼簡潔但棧開銷大,n 較大時易棧溢出,生產環境推薦迭代法。

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