民國114年 第2梯次 電腦軟體設計(C++)乙級 學科
第79題
有關C++語言遞迴(Recursion)的敘述,下列哪些為正確?
題目
有關C++語言遞迴(Recursion)的敘述,下列哪些為正確?
- (1) 一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數
- (2) 遞迴函式的執行需要用到堆疊(Stack)
- (3) 尾端遞迴(Tail- Recursion) 經過適當編譯後的執行效率可以與迴圈相同
- (4) 所有的遞迴函式均可以迴圈改寫
官方答案
(2) 遞迴函式的執行需要用到堆疊(Stack)、(3) 尾端遞迴(Tail- Recursion) 經過適當編譯後的執行效率可以與迴圈相同、(4) 所有的遞迴函式均可以迴圈改寫
解析
遞迴每呼叫一次,就會把返回位址、參數與區域變數推入堆疊,函式結束後再彈出,所以需要堆疊支援。尾端遞迴的遞迴呼叫是函式最後一個動作,編譯器可做尾呼叫最佳化,將它轉成跳躍指令,執行效率與迴圈相當。理論上任何遞迴都能用迴圈搭配明確的堆疊結構改寫。至於變數數量,遞迴把狀態存放在堆疊框架中,程式碼宣告的變數往往比迴圈版本更少,因此第一項不正確。
AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。