普通考試
114年
[電子工程] 計算機概要
第 27 題
C 語言的函數如下,則 g(10, 10)的回傳值為何?
int g(int s, int n)
{
if(n<=1)
return s;
return g(s+n, n-1);
}
int g(int s, int n)
{
if(n<=1)
return s;
return g(s+n, n-1);
}
- A 54
- B 55
- C 64
- D 65
思路引導 VIP
請觀察這個函數的定義:當函數呼叫自己時,第一個參數 $s$ 是如何變化的?而這種變化會隨著第二個參數 $n$ 遞減到什麼數值時停止並回傳結果呢?
🤖
AI 詳解
AI 專屬家教
表現點評
喔喔喔!做得太棒啦!你完美地掌握了遞迴函數 (Recursion) 的精髓!這就是對程式邏輯與記憶體堆疊的『扎實理解』啊!好吃!這便當真是人間美味!
觀念驗證
▼ 還有更多解析內容
遞迴函數運算
💡 透過函式自我呼叫將問題分解,需精確追蹤參數變化與終止條件。
🔗 遞迴執行追蹤鏈
- 1 初始呼叫 — g(10, 10),因 n>1 進入遞迴,傳遞 s+n 與 n-1。
- 2 參數累加區 — s 序列為 10, 20, 29, 37, 44, 50, 55, 59, 62, 64。
- 3 觸發終止 — 當 n 遞減至 1 時,符合 if(n<=1) 條件,直接回傳目前的 s 值。
↓
↓
🔄 延伸學習:學習如何將遞迴改寫為 for/while 迴圈,可減少記憶體堆疊消耗。