int sum2(int n) {
int sum = 0;
if (n < 0) printf("error\n"); // 缺少 return
// else if (n == 0 || n == 1) sum = 1; // 被註釋
else sum = sum2(n - 1) * n;
return sum;
}
sum2(5) → 遞歸至 sum2(0) → sum2(-1) … 無限遞歸。n 溢出變負,觸發 if (n < 0) 打印 error。sum = sum2(n-1)*n,sum 為 0,層層返回 0。
int fact(int n) {
if (n < 0) return -1; // 錯誤碼
if (n == 0 || n == 1) return 1; // 基線條件:必須在遞歸調用前
return n * fact(n - 1);
}