普考申論題
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 ;
}
}
述執行過程。(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:逐步展開 — 列出每一層的參數與回傳表示式,直到觸發終止條件。
- 2 步驟 2:確認終止值 — 根據 Base Case 算出最後一層的具體數值。
- 3 步驟 3:反向代入 — 由底層向上代回數值,完成各層剩餘的加法運算。
↓
↓
🔄 延伸學習:延伸學習:了解電腦系統如何利用堆疊 (Stack) 儲存每一層的返回位址與區域變數。