普考-資訊處理計算機概要114 年第 27 題單選題
下列 Pseudo code:
a=1; b=1; c=0;
f(a,b,i) { if(i==0) return (a);
else { c=a+b; i=i-1;
f(c,a,i);
}
}
如果參數 i 的值一開始為 5,執行後 function f()結果為何?
A正確答案
典型費氏數列遞迴:每次 c=a+b,然後以 (c,a,i-1) 遞迴呼叫,i=5 時結果為 13。
為什麼答案是 A
逐層追:(1,1,5)→(2,1,4)→(3,2,3)→(5,3,2)→(8,5,1)→(13,8,0),i=0 回傳 a=13,正解。
載入中…
完整詳解
Pro · 無限重點 典型費氏數列遞迴:每次 c=a+b,然後以 (c,a,i-1) 遞迴呼叫,i=5 時結果為 13。
追蹤法:從 (1,1,5) 開始,每層新 a = 舊 a+b,形成 1,2,3,5,8,13。
逐選項分析
A✓ 正確
逐層追:(1,1,5)→(2,1,4)→(3,2,3)→(5,3,2)→(8,5,1)→(13,8,0),i=0 回傳 a=13,正解。
B✕
32 不符費氏數列遞推結果,屬於 2 的次方干擾選項。
C✕ 陷阱
8 是倒數第二層的 a 值(i=1 時),容易因少算一層而誤選。
D✕
16 為 2^4,與遞迴實際計算無關,純干擾。
遞迴追蹤表 (a,b,i)
| 層數 | a | b | i | c=a+b |
|---|
| 0 | 1 | 1 | 5 | 2 |
| 1 | 2 | 1 | 4 | 3 |
| 2 | 3 | 2 | 3 | 5 |
| 3 | 5 | 3 | 2 | 8 |
| 4 | 8 | 5 | 1 | 13 |
| 5 | 13 | 8 | 0 | 回傳 a=13 |
遞迴的費氏數列計算有個常見盲點:遞迴層數容易少算一層。當參數從 5 遞減到 0 時,實際上會執行 6 層函式呼叫(5→4→3→2→1→0),而不是 5 層。正確做法是從初始值開始,每層執行 c=a+b 並以 (c,a,i-1) 遞迴,直到 i=0 時回傳 a。許多考生會誤以為「i=5 就執行 5 次」,導致少算最後的基礎情況,得出錯誤結果 8。關鍵判斷準則:基礎條件 i=0 時才停止並回傳,之前每層都要累加。