民國107年 第2梯次 電腦軟體設計(JAVA)乙級 學科

第68題

有關Java 語言遞迴(Recursion)的敘述,下列那些正確?

題目

有關Java 語言遞迴(Recursion)的敘述,下列那些正確?

  1. (1) 一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數
  2. (2) 尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同
  3. (3) 所有的遞迴函式均可以迴圈改寫
  4. (4) 遞迴函式的執行需要用到堆疊(Stack)

官方答案

(2) 尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同、(3) 所有的遞迴函式均可以迴圈改寫、(4) 遞迴函式的執行需要用到堆疊(Stack)

解析

遞迴每呼叫一次,就會在堆疊(Stack)上建立新的活動記錄,用來保存參數、區域變數與返回位址,所以第4項正確。尾端遞迴(Tail Recursion)的遞迴呼叫是最後一個動作,回傳後不需再做運算,編譯器可將其最佳化為跳躍指令,改成等效迴圈,執行效率與迴圈相當,第2項正確。理論上任何遞迴都可用迴圈加上自行維護的堆疊改寫,兩者等效,第3項正確。至於第1項,遞迴通常不必宣告迴圈計數器或累加變數,變數不見得比迴圈多,主要差別在堆疊空間與呼叫成本,故不選。

AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。

官方資料