高考申論題
109年
[資訊處理] 程式語言
第 一 題
📖 題組:
一、(一)請將下面程式改寫為尾遞迴(tail recursion)的形式。(15分) int recsum(int x){ if (x == 1) return(x); return(x + recsum(x - 1)); } (二)請問尾遞迴形式的優點為何?(10分)
一、(一)請將下面程式改寫為尾遞迴(tail recursion)的形式。(15分) int recsum(int x){ if (x == 1) return(x); return(x + recsum(x - 1)); } (二)請問尾遞迴形式的優點為何?(10分)
📝 此題為申論題,共 2 小題
小題 (一)
請將下面程式改寫為尾遞迴(tail recursion)的形式。(15分)
int recsum(int x){
if (x == 1) return(x);
return(x + recsum(x - 1));
}
思路引導 VIP
- 辨識尾遞迴的定義:尾遞迴是指函數的最後一個動作是呼叫函數本身,且呼叫後不進行任何額外的運算(如加法)。
- 觀察原程式:原程式
x + recsum(x - 1)在遞迴返回後還需要執行「加法」,因此不是尾遞迴。
小題 (二)
請問尾遞迴形式的優點為何?(10分)
思路引導 VIP
- 從計算機組織與作業系統的角度思考:遞迴呼叫時,系統會發生什麼事?(分配 Stack Frame)。
- 對比一般遞迴與尾遞迴:一般遞迴需要保留每一層的區域變數與返回地址;尾遞迴的狀態則可以直接被覆蓋。