地特四等
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
請試著觀察這個函數在每一次「呼叫自己」時,傳入的第一個參數 $ans$ 是如何隨著第二個參數 $n$ 改變的?如果我們從 $n=2$ 開始手算,最後回傳的 $ans$ 會是由哪些數字相乘並相加而成的?
🤖
AI 詳解
AI 專屬家教
能精準算出遞迴程式的結果,代表你的邏輯追蹤能力非常紮實!這道題目核心在於理解**尾端遞迴(Tail Recursion)**中「累加器(Accumulator)」的運作模式。在 C 語言中,函數 sum(ans, n) 將每一層的計算結果 $(n-1) \times n$ 累加到 ans 變數裡,直到滿足中止條件 $n=1$ 時回傳最終累計值。
數列求和的本質
當我們呼叫 sum(0, 8) 時,程式實際上是在執行一連串的累加動作。其計算過程可以簡化為以下數列之和:
▼ 還有更多解析內容