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

第75題

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

題目

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

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

官方答案

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

解析

遞迴每呼叫一次,就會把參數、區域變數與返回位址推入呼叫堆疊,因此必須有堆疊支援,選項2正確。尾端遞迴的遞迴呼叫是函式最後一個動作,之後沒有其他運算,編譯器可將其最佳化成跳躍指令,執行效率可與迴圈相當,選項3正確。理論上任何遞迴都能用迴圈搭配自行維護的堆疊改寫,選項4正確。至於選項1,遞迴通常把狀態放在參數中傳遞,反而不見得需要比迴圈更多的變數宣告,故此敘述不成立。

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

官方資料