#include <stdio.h>
// 記憶化數組
int memo[1000];
// 初始化記憶化數組
void initializeMemo() {
for (int i = 0; i < 1000; i++) {
memo[i] = -1;
}
}
// 記憶化 Fibonacci 函數
int fibonacci(int n) {
if (memo[n] != -1) {
return memo[n]; // 返回已經計算過的值
}
if (n == 0) {
memo[n] = 0; // 基礎情況
} else if (n == 1) {
memo[n] = 1; // 基礎情況
} else {
memo[n] = fibonacci(n - 1) + fibonacci(n - 2); // 遞迴情況
}
return memo[n];
}
int main() {
int n = 10;
initializeMemo(); // 初始化記憶化數組
for (int i = 0; i < n; i++) {
printf("%d ", fibonacci(i));
}
return 0;
}
遞迴演算法通過函數自調用來解決問題,適用於可以分解為相似子問題的情況。Fibonacci 序列是遞迴演算法的經典例子。雖然遞迴使得程式碼更簡潔,但也可能存在效率問題,可以通過記憶化等技術進行優化。