Q34.
在會議室有n 個人,每個人彼此會握手寒喧一次,欲知道此n 個人共握手幾次,下列遞迴函式之寫法何者是正確的?
電腦軟體設計(C++) · 乙級 · C++ · Q34
難易度分析
3 / 5
本題要求考生具備分析遞迴程式結構的能力,需能正確判別函式的終止條件是否完備,以及遞迴過程中的邏輯累加是否正確,並能識別出常見的程式撰寫錯誤陷阱。
正確答案:③
③
:正確遞迴公式為 handshake(n) = (n-1) + handshake(n-1),以 `n<2` 為終止條件回傳 0,符合握手問題數學原理 n(n-1)/2。
:正確遞迴公式為 handshake(n) = (n-1) + handshake(n-1),以 `n<2` 為終止條件回傳 0,符合握手問題數學原理 n(n-1)/2。錯誤選項解析
- ①
:此遞迴在 `else` 分支僅回傳 `handshake(n-1)`,未累加 (n-1),導致 n≥2 時恆回傳 1,無法正確計算握手總次數。 - ②
:使用 `for` 迴圈重複賦值 `h = (n-1) + handshake(n-1)` 共 n 次,邏輯冗餘且錯誤,遞迴不應搭配此類迴圈結構。 - ④
:缺少遞迴終止條件(base case),會導致無限遞迴並引發 stack overflow 當機。
Learning Tip
"遞迴三要素為:終止條件、遞迴關係式、向終止條件收斂。握手問題的核心是第 n 個人加入時需與前 (n-1) 人各握一次手,故遞迴式為 `f(n) = f(n-1) + (n-1)`。常考陷阱為遺漏 base case 或遞迴式中未正確累加增量值。"
學員答題分佈
①
0%
0%②0%
③
0%
0%④
0%
0%此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!