民國115年 普通考試 資訊處理 程式設計概要
第4題
請說明如下Python 程式,使用PQ_recursive(3)呼叫後,正確執行時的輸 出結果為何?如若無法正確執行(即會出現執行時期的錯誤),請說明應 如何修…
題目
請說明如下Python 程式,使用PQ_recursive(3)呼叫後,正確執行時的輸 出結果為何?如若無法正確執行(即會出現執行時期的錯誤),請說明應 如何修正才能正常執行及輸出結果為何。(18 分)
參考解答(AI 生成,非官方)
- 一、前提說明:本題 Python 程式未隨題目附上,PQ_recursive(3) 的實際輸出取決於函式內部的遞迴關係、終止條件與資料結構(可能為 priority queue,以 heapq 或排序清單實作),因此無法憑題幹推得唯一結果,僅能提供追蹤與判定方法。
- 二、遞迴追蹤法:由 PQ_recursive(3) 起,展開為對 PQ_recursive(2)、PQ_recursive(1) 等的呼叫,畫出遞迴樹並標註每層的引數、區域變數與回傳值;注意 Python 採傳值傳遞物件參考,若函式內對可變物件(list、dict)做 append、pop、sort 等操作,會影響外層同一物件,造成共享狀態(aliasing)。
- 三、常見錯誤型態:RecursionError: maximum recursion depth exceeded(缺少或錯誤的終止條件)、IndexError: pop from empty list(對空堆積取出元素)、TypeError(比較不可比較的型別,如 heapq 內元素為 tuple 時第二欄不可比)、以可變物件作為預設參數(def f(x, acc=[]))導致跨呼叫累積。
- 四、修正方式:補上明確的基底情況(base case),如 if n <= 0: return;取出前先判斷容器是否為空;heapq 元素改為 (priority, index, value) 三元組以避免比較錯誤;預設參數改為 None 並在函式內初始化;必要時以 sys.setrecursionlimit 提高上限,但根本仍應修正終止條件。
- 五、輸出判定:若正常執行,輸出即為各 print 依呼叫順序印出的內容,須注意遞迴「去程」與「回程」的列印位置差異,以及優先權佇列取出順序(最小堆積由小到大)。因原始碼缺漏,無法得出唯一數值。
AI 依官方試題文字產生的參考解答,非考選部公告答案,內容僅供備考參考。