民國114年 第2梯次 電腦軟體設計(C++)乙級 學科

第79題

有關C++語言遞迴(Recursion)的敘述,下列哪些為正確?

題目

有關C++語言遞迴(Recursion)的敘述,下列哪些為正確?

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

官方答案

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

解析

遞迴每呼叫一次,就會把返回位址、參數與區域變數推入堆疊,函式結束後再彈出,所以需要堆疊支援。尾端遞迴的遞迴呼叫是函式最後一個動作,編譯器可做尾呼叫最佳化,將它轉成跳躍指令,執行效率與迴圈相當。理論上任何遞迴都能用迴圈搭配明確的堆疊結構改寫。至於變數數量,遞迴把狀態存放在堆疊框架中,程式碼宣告的變數往往比迴圈版本更少,因此第一項不正確。

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

官方資料