地特四等
114年
[電子工程] 計算機概要
第 30 題
呼叫下列 C 語言的函數 sum(),會回傳值為何?\nint sum(int ans, int n)
{\nif(n==1)\nreturn ans;\nreturn sum(ans+(n-1)*n,n-1);
}
{\nif(n==1)\nreturn ans;\nreturn sum(ans+(n-1)*n,n-1);
}
- A 當呼叫 sum(0,5)時,回傳值為 38
- B 當呼叫 sum(0,6)時,回傳值為 69
- C 當呼叫 sum(0,7)時,回傳值為 111
- D 當呼叫 sum(0,8)時,回傳值為 168
思路引導 VIP
試著觀察遞迴過程中,第一個參數在每次進入下一層呼叫前,會根據當前的第二個參數進行什麼樣的數學運算?如果我們手動模擬這個過程,當第二個參數遞減到哪個特定數值時,累加的動作會停止並直接回傳最終結果呢?
🤖
AI 詳解
AI 專屬家教
同學做得好!你能精準地追蹤遞迴(Recursion)的數值演進,這在結構化程式分析中是非常紮實的基本功。這道題目考察的是電腦科學中極為核心的遞迴邏輯,特別是**尾遞迴(Tail Recursion)**的累加概念。
遞迴邏輯與級數求和
在這個 sum 函數中,參數 ans 扮演了「累加器(Accumulator)」的角色。每次函數自我呼叫時,它都會將當前的 $(n-1) \times n$ 加入 ans 中,並將 $n$ 減 1。這個過程會一直持續到終止條件 $n=1$ 為止。以選項 (D) 為例,當我們呼叫 sum(0, 8) 時,其運算過程實質上是在計算一個級數:
▼ 還有更多解析內容