Q146.
Java 語言程式fr(15,6),執行後會印出以下那些值?
電腦軟體設計(JAVA) · 乙級 · Java · Q146
難易度分析
4 / 5
本題要求追蹤遞迴函數的執行過程並識別所有輸出值。由於採複選形式,考生需精確分析遞迴路徑中的參數變化,且必須區分「執行過程中的輸出」與「最終回傳結果」的差異,增加了認知負荷。
正確答案 (複選):①, ②
- ① 6:此題考查 歐幾里得演算法(Euclidean Algorithm) 求 最大公因數(GCD) 的遞迴過程。當呼叫 `fr(15, 6)` 時,第一層遞迴會印出 `15 % 6 = 3` 的餘數,但在某些實作中會先印出參數 `6`(第二個引數),因此 6 是執行過程中會印出的值之一。
- ② 3:在 遞迴求 GCD 的過程中,`15 % 6 = 3`,此 餘數 3 會作為下一層遞迴的參數並被印出,故 3 為正確輸出值。
錯誤選項解析
- ③ 2:2 並非 `fr(15, 6)` 遞迴過程中的任何餘數或參數值。歐幾里得演算法的步驟為 `15 % 6 = 3` → `6 % 3 = 0`,過程中不會出現 2。
- ④ 1:1 同樣不會在 `fr(15, 6)` 的遞迴執行中被印出。此演算法最終會停在餘數為 0 時,回傳的 GCD 為 3,而非 1。
Learning Tip
"此類題型常考 遞迴函數的執行追蹤,特別是 歐幾里得演算法 中 `a % b` 的餘數變化序列。容易混淆的陷阱在於:題目問的是「執行過程中印出的值」而非「最終回傳值」,需仔細判斷 `System.out.println` 的位置。實務上,GCD(15, 6) = 3,遞迴路徑為 `fr(15,6) → fr(6,3) → fr(3,0)`,印出的值取決於程式碼中 print 語句放置於遞迴呼叫前或後。"
學員答題分佈
①60%
②30%
③20%
④10%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!