民國107年 第2梯次 電腦軟體設計(JAVA)乙級 學科
第68題
有關Java 語言遞迴(Recursion)的敘述,下列那些正確?
題目
有關Java 語言遞迴(Recursion)的敘述,下列那些正確?
- (1) 一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數
- (2) 尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同
- (3) 所有的遞迴函式均可以迴圈改寫
- (4) 遞迴函式的執行需要用到堆疊(Stack)
官方答案
(2) 尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同、(3) 所有的遞迴函式均可以迴圈改寫、(4) 遞迴函式的執行需要用到堆疊(Stack)
解析
遞迴每呼叫一次,就會在堆疊(Stack)上建立新的活動記錄,用來保存參數、區域變數與返回位址,所以第4項正確。尾端遞迴(Tail Recursion)的遞迴呼叫是最後一個動作,回傳後不需再做運算,編譯器可將其最佳化為跳躍指令,改成等效迴圈,執行效率與迴圈相當,第2項正確。理論上任何遞迴都可用迴圈加上自行維護的堆疊改寫,兩者等效,第3項正確。至於第1項,遞迴通常不必宣告迴圈計數器或累加變數,變數不見得比迴圈多,主要差別在堆疊空間與呼叫成本,故不選。
AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。