Q125.
有關Java 語言遞迴(Recursion)的敘述,下列那些正確?
電腦軟體設計(JAVA) · 乙級 · Java · Q125
難易度分析
4 / 5
本題為複選題,要求對遞迴執行機制、計算理論等價性及編譯優化等多個核心概念有精確理解,且需區分記憶體消耗的具體形式,增加了判斷複雜度。
正確答案 (複選):②, ③, ④
- ② 尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同:尾端遞迴(Tail Recursion) 的遞迴呼叫位於函式最後且無後續運算,編譯器可透過尾呼叫優化(TCO) 將其轉換為跳轉指令,避免堆疊增長,執行效率等同於迴圈。
- ③ 所有的遞迴函式均可以迴圈改寫:遞迴與迴圈在計算理論上具有等價性,任何遞迴邏輯皆可透過顯式堆疊(Explicit Stack) 或狀態變數以迴圈重寫,反之亦然。
- ④ 遞迴函式的執行需要用到堆疊(Stack):每次遞迴呼叫都會在程式呼叫堆疊(Call Stack) 上建立新的堆疊幀(Stack Frame)以儲存區域變數與返回位址,此為遞迴執行的核心機制。
錯誤選項解析
- ① 一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數:遞迴與迴圈所需的變數數量取決於問題本身,而非實作方式。遞迴主要額外消耗的是呼叫堆疊(Call Stack)空間用於儲存函式調用幀,而非宣告更多變數。
Learning Tip
"本題核心考點為遞迴與迴圈的等價性及尾端遞迴優化。常見陷阱是混淆「堆疊空間消耗」與「變數數量」——遞迴消耗的是 Call Stack 而非額外變數。實務上需注意 Java 編譯器目前不支援尾呼叫優化,過度遞迴仍會引發 StackOverflowError,建議在深度遞迴場景優先改用迭代法或顯式堆疊實作。"
學員答題分佈
①一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數0%
②尾端遞迴(Tail- recursion) 經過適當編譯後的執行效率可以與迴圈相同0%
③所有的遞迴函式均可以迴圈改寫0%
④遞迴函式的執行需要用到堆疊(Stack)0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!