LONGEPASS
電腦軟體設計(C++)/C++/Q110
困難
正確率 -
Q110.

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

電腦軟體設計(C++) · 乙級 · C++ · Q110

難易度分析

4 / 5

本題採複選形式,要求對遞迴底層實作、編譯器最佳化及計算理論具有全面且精確的掌握度,且選項中包含易混淆的概念陷阱,增加了判別難度。

正確答案 (複選):②, ③, ④

  • ② 尾端遞迴(Tail- Recursion) 經過適當編譯後的執行效率可以與迴圈相同:尾端遞迴(Tail Recursion)指遞迴呼叫為函式最後一個動作,編譯器可進行尾端呼叫最佳化(TCO),將其轉換為跳躍指令,消除額外堆疊幀的開銷,使執行效率等同於迴圈。
  • ③ 所有的遞迴函式均可以迴圈改寫:遞迴與迴圈在計算理論上具有等價性,任何遞迴邏輯皆可透過顯式堆疊(Explicit Stack)或狀態機機制改寫為迴圈形式,此為程式設計的基本原理。
  • ④ 遞迴函式的執行需要用到堆疊(Stack):遞迴函式每次呼叫時,系統會自動在呼叫堆疊(Call Stack)上建立新的堆疊幀(Stack Frame)以儲存返回位址與區域變數,此為遞迴運作的核心機制。

錯誤選項解析

  • ① 一般使用遞迴解決問題較使用迴圈解決問題,需要宣告更多的變數:遞迴與迴圈所需的變數宣告數量並無必然差異,兩者可宣告相同數量的區域變數。遞迴的額外開銷來自呼叫堆疊(Call Stack)的記憶體使用,而非變數宣告較多。
Learning Tip

"本題核心考點為遞迴的底層實作原理與最佳化條件。常見陷阱在於混淆「遞迴的記憶體開銷」(來自堆疊幀)與「變數宣告數量」。需特別注意:僅有尾端遞迴可被編譯器最佳化為迴圈等級的效率,一般遞迴則會因堆疊深度增加而產生 Stack Overflow 風險。實務上,當遞迴層級過深時,建議改寫為迭代(Iteration)或使用顯式堆疊以提升穩定性。"

學員答題分佈

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

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目