#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 括號內,結構清晰,適合已知循環次數的場景。
#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! 溢出)。long long factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
遞歸代碼簡潔但棧開銷大,n 較大時易棧溢出,生產環境推薦迭代法。