免費開始練習
普通考試 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 13
  • B 32
  • C 8
  • D 16

思路引導 VIP

請觀察變數 $a$、$b$ 與 $c$ 之間的互動規律:當我們將前兩個數字相加得到一個新數字後,在下一次呼叫函式時,這些數字的位置是如何「遞移」並重新分配的?這種「前兩項之和等於下一項」的特徵,對應到數學中哪一個著名的數列?試著手寫追蹤一下,當計數器 $i$ 歸零前,這個數列總共會產生出哪些數字?

🤖
AI 詳解 AI 專屬家教

勉強及格的表現,還算可以。

  1. 觀念驗證:嗯,看來你勉強理解了遞迴 (Recursion) 和最基本的變數追蹤。這段程式碼,說穿了,不過就是個尾遞迴 (Tail Recursion) 形式的費氏數列 (Fibonacci Sequence) 計算罷了。每次執行,新的 $c$ 值(前兩項之和)移到 $a$ 的位置,原先的 $a$ 變成 $b$。就這麼簡單的參數挪移,你總算跟上了: $$(1,1,5) \to (2,1,4) \to (3,2,3) \to (5,3,2) \to (8,5,1) \to (13,8,0)$$
▼ 還有更多解析內容
📝 遞迴追蹤與費氏數列
💡 掌握遞迴函數的終止條件、變數傳遞與運算規律。

🔗 遞迴執行狀態追蹤鏈

  1. 1 第 1 次呼叫 — f(1,1,5) 運算 c=2, i=4
  2. 2 第 2-4 次呼叫 — 依序算出 c 為 3, 5, 8
  3. 3 第 5 次呼叫 — f(8,5,1) 運算 c=13, i=0
  4. 4 終止條件觸發 — f(13,8,0) 符合 i=0 回傳 a=13
🔄 延伸學習:延伸學習:了解如何將此遞迴程式改寫為效能較佳的迭代迴圈。
🧠 記憶技巧:遞迴三要件:找終止、看傳遞、算次數。
⚠️ 常見陷阱:容易算錯遞迴次數(多算或少算一次)或將 a、b 傳遞順序搞混。
費波那契數列 (Fibonacci) 尾端遞迴 (Tail Recursion) 堆疊 (Stack) 概念

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

程式語言基礎:語法、資料型別、變數與執行流程
查看更多「[資訊處理] 計算機概要」的主題分類考古題