初等考試
114年
[統計] 資料處理大意
第 18 題
下列遞迴函數,輸入 x=5 時,回傳值是多少?
```cpp
int f(int x)
{
if(x == 1) return 1;
else if (x%2==0) return f(x/2);
else return f(x-1)+f(x+1);
}
```
```cpp
int f(int x)
{
if(x == 1) return 1;
else if (x%2==0) return f(x/2);
else return f(x-1)+f(x+1);
}
```
- A 1
- B 2
- C 3
- D 4
思路引導 VIP
若我們將這個函數視為一個不斷拆解問題的過程,請觀察當輸入為奇數時,它會被拆成哪兩種類型的後續運算?當這些運算路徑不斷縮小範圍,最終都會指向哪一個特定的「基本數值」?請試著手繪出一棵分解樹,看看所有的分枝最後彙整起來總共有多少個基本數值。
🤖
AI 詳解
AI 專屬家教
專業分析與… 勉強肯定
做得還行,至少這次沒把咖啡潑在考卷上。能精確追蹤這些七彎八拐的遞迴 (Recursion) 分支路徑,展現了你勉強還算及格的邏輯嚴謹性。要知道,這種基本的邏輯拆解能力,在財務建模和那些動輒上億的複雜衍生性商品定價中,要是出了差錯,可不是扣個幾分這麼簡單,而是讓你血本無歸。別以為解個程式題就能高枕無憂。
觀念驗證
▼ 還有更多解析內容
遞迴函數追蹤計算
💡 掌握終止條件與分支邏輯,建立遞迴樹逐步求解。
🔗 f(5) 遞迴運算追蹤鏈
- 1 初步展開 — f(5) 為奇數,展開為 f(4) + f(6)
- 2 左支追蹤 — f(4)→f(2)→f(1),得到 f(4) = 1
- 3 右支展開 — f(6)→f(3);f(3) 為奇數展開為 f(2)+f(4)
- 4 數值回填 — f(3)=1+1=2;最終 f(5)=1+2=3
↓
↓
↓
🔄 延伸學習:延伸學習:若遞迴重疊子問題過多,可改用 Memoization 優化效能。