要將這個遞迴函數改成非遞迴的寫法,我們需要理解這個函數實際上在計算什麼。根據你提供的函數,它實際上是在計算 n 的階乘(factorial),而不是之前的和。
給定函數:
這個函數計算 n 的階乘,記作 n!。階乘的定義是:
n!=n×(n−1)×(n−2)×…×1n! = n \times (n-1) \times (n-2) \times \ldots \times 1n!=n×(n−1)×(n−2)×…×1
我們可以使用迴圈來實現這個計算。以下是非遞迴版本的 f 函數:
#include <stdio.h>
int f(int n) { int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; }
int main() { int n = 5; // 示例數值 printf("f(%d) = %d\n", n, f(n)); // 應輸出 f(5) = 120 return 0; }
這個非遞迴版本的 f 函數通過迴圈來計算 n 的階乘,避免了遞迴調用帶來的呼叫堆疊深度問題,更加高效且容易理解。