高考申論題
111年
[電力工程] 計算機概論
第 二 題
📖 題組:
二、Scheme 是一種函式程式語言(functional programming language),其中定義了一個函式如下: (define (mystery input-list) (cond ((null? input-list) 0) (else ( + 1 (mystery (cdr input-list)))))) (一)執行下列函式的呼叫,結果為何?(5 分) (mystery (list 4 5 6)) (二)解釋這個 mystery 函式,在計算什麼?(5 分) (三)用 Scheme 語法,定義出一個函式 factorial n,這個函式要算出 n!。(10 分)
二、Scheme 是一種函式程式語言(functional programming language),其中定義了一個函式如下: (define (mystery input-list) (cond ((null? input-list) 0) (else ( + 1 (mystery (cdr input-list)))))) (一)執行下列函式的呼叫,結果為何?(5 分) (mystery (list 4 5 6)) (二)解釋這個 mystery 函式,在計算什麼?(5 分) (三)用 Scheme 語法,定義出一個函式 factorial n,這個函式要算出 n!。(10 分)
📝 此題為申論題,共 3 小題
小題 (二)
解釋這個 mystery 函式,在計算什麼?(5 分)
思路引導 VIP
考生應先拆解 Scheme 語法中的遞迴結構:觀察終止條件(Base case)與遞迴步驟(Recursive step)。終止條件為空串列時回傳 0,遞迴步驟為每次取串列剩餘部分(cdr)並將結果加 1,由此即可推導出其作用為計算串列元素數量。
小題 (一)
執行下列函式的呼叫,結果為何?(5 分)
(mystery (list 4 5 6))
(mystery (list 4 5 6))
思路引導 VIP
面對遞迴(Recursion)程式追蹤題,應先找出「終止條件(Base case)」與「遞迴呼叫(Recursive call)的縮減方式」。此題利用逐步代入法,追蹤 Scheme 中 cdr(取得去除首項後的剩餘串列)的執行過程,將清單元素逐層展開即可得出結果。
小題 (三)
用 Scheme 語法,定義出一個函式 factorial n,這個函式要算出 n!。(10 分)
思路引導 VIP
看到階乘 (n!) 應立刻聯想到遞迴 (Recursion) 的兩個核心要件:基礎條件 (Base Case) 與遞迴步驟 (Recursive Step)。在 Scheme 中,利用 define 定義函式,並透過 if 或 cond 控制條件分支,實現 n 乘以 (n-1)! 的遞迴呼叫即可得解。
Scheme 遞迴邏輯
💡 掌握函式語言遞迴三要素:基本條件、遞迴步驟、收斂方向。
🔗 Scheme 遞迴執行機制
- 1 條件檢查 (Check) — 判斷 (null? input-list) 是否為真,若真則回傳 0。
- 2 規模縮減 (Reduce) — 利用 (cdr input-list) 剝離首元素,縮小參數規模。
- 3 遞迴呼叫 (Call) — 進入下一層 mystery,並於回傳路徑執行 (+ 1 ...)。
↓
↓
🔄 延伸學習:延伸學習:掌握如何將一般遞迴改寫為尾端遞迴以節省堆疊空間。