f(10) = 1
f(day) = 2 * (f(day+1) + 1) for day = 9..1
#include <stdio.h>
int peaches(int day) {
if (day == 10) return 1; // 基礎情況
return 2 * (peaches(day + 1) + 1); // 遞迴步驟
}
int main() {
printf("第一天摘了 %d 個桃子\n", peaches(1));
return 0;
}
peaches(1)
= 2*(peaches(2)+1)
= 2*(2*(peaches(3)+1)+1)
...
= 2*(2*(...2*(1+1)+1...)+1) // 9 層
= 1534
int peaches_iter() {
int p = 1;
for (int d = 9; d >= 1; --d) p = 2*(p+1);
return p;
}
| 維度 | 遞迴 | 迭代 |
|---|---|---|
| 程式碼簡潔度 | 高 | 中 |
| 空間複雜度 | O(n) 堆疊 | O(1) |
| 效能 | 函數呼叫開銷 | 極快 |
| 適用場景 | 教學、樹狀結構 | 生產環境、簡單線性遞推 |
遞迴版本優雅展示數學定義,迭代版本效能最佳。理解兩者轉換是演算法基本功。