免費開始練習
普考申論題 114年 [資訊處理] 程式設計概要

第 二 題

請問以 a(7,20)呼叫下列a()函式,函式執行完後其回傳值為何?並需詳
述執行過程。(20分)
int a(int n, int m) {
if (n >= 10) {
if (m < 16) {
return n + m;
}
else {
return a(n, m-2) + m ;
}
}
else {
return a(n+1, m) + n ;
}
}
📝 此題為申論題

思路引導 VIP

遇到遞迴函式(Recursive Function)題型,解題核心在於『逐步展開、反向收斂』。請先依序寫下每一次函式呼叫的參數與進入的條件分支,直到觸發遞迴終止條件(Base Case),最後再一層層將數值反推代回,即可避免計算錯誤。

🤖
AI 詳解 AI 專屬家教

【解題思路】本題考查遞迴函式(Recursive Function)的執行流程,需透過「逐步展開(遞迴呼叫)」與「反向代入(回傳計算)」兩個階段來精確追蹤變數狀態與回傳結果。 【詳解】 階段一:逐步展開(依序判斷條件並遞迴呼叫)

▼ 還有更多解析內容
📝 遞迴函式追蹤計算
💡 理解遞迴終止條件,循序展開呼叫並反向代回累加求值。

🔗 遞迴程式解題三步驟

  1. 1 步驟 1:逐步展開 — 列出每一層的參數與回傳表示式,直到觸發終止條件。
  2. 2 步驟 2:確認終止值 — 根據 Base Case 算出最後一層的具體數值。
  3. 3 步驟 3:反向代入 — 由底層向上代回數值,完成各層剩餘的加法運算。
🔄 延伸學習:延伸學習:了解電腦系統如何利用堆疊 (Stack) 儲存每一層的返回位址與區域變數。
🧠 記憶技巧:層層展開找終點,步步回頭算總和。
⚠️ 常見陷阱:最常在反向代入時漏掉每一層原有的加項,或在展開時判斷錯 if-else 分支。
堆疊 (Stack) 資料結構 費氏數列 (Fibonacci) 空間複雜度分析 尾端遞迴 (Tail Recursion)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

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

🏷️ 相關主題

程式設計基礎概念與實作演練
查看更多「[資訊處理] 程式設計概要」的主題分類考古題