農會 資訊管理類程式設計108 年第 14 題單選題
以下為一個C 語言函式,關於此函數,下列何者錯誤?
int demo(int n)
{
if (n!=1) return n+2*demo(n-1);
else return 1;
}
Ademo()為一個遞迴函式
Bdemo()為一個虛擬函式正確答案
Cdemo(2)=3正確答案
Ddemo(3)=11
Edemo(4)=26
B、C正確答案
C語言無虛擬函式概念,且遞迴計算 demo(2) 結果為 4 而非 3,故 B 與 C 選項敘述錯誤。
為什麼答案是 B、C
虛擬函式(Virtual Function)是C++等多型物件導向語言的特性,C語言根本不支援,敘述錯誤。
考點:遞迴定義考點:虛擬函式考點:遞迴計算
載入中…
完整詳解
Pro · 無限重點 C語言無虛擬函式概念,且遞迴計算 demo(2) 結果為 4 而非 3,故 B 與 C 選項敘述錯誤。
C語言不支援虛擬函式秒殺B;將n=1代入得1,n=2代入得2+2(1)=4,發現C寫3是錯的,輕鬆選BC。
逐選項分析
A遞迴定義✕
函式內部呼叫 demo(n-1) 自身,符合遞迴函式定義,敘述正確。
B虛擬函式✓ 正確
虛擬函式(Virtual Function)是C++等多型物件導向語言的特性,C語言根本不支援,敘述錯誤。
C遞迴計算✓ 正確
代入n=2,計算 2 + 2*demo(1) = 2 + 2*1 = 4,選項寫3是錯的,敘述錯誤。
D遞迴計算✕
代入n=3,計算 3 + 2*demo(2) = 3 + 2*4 = 11,計算結果正確,敘述正確。
E遞迴計算✕
代入n=4,計算 4 + 2*demo(3) = 4 + 2*11 = 26,計算結果正確,敘述正確。
遞迴函式 vs 虛擬函式
| 特性 | 遞迴函式 (Recursive) | 虛擬函式 (Virtual) |
|---|
| 核心定義 | 函式在內部呼叫自身來解決問題 | 基底類別宣告,由衍生類別覆寫(Override) |
| 語言支援 | C、C++、Java、Python等皆支援 | C++、C#等物件導向語言支援(C語言無) |
| 本題對應 | demo() 內部呼叫 demo(),屬遞迴 | C語言無此概念,選項B為幹擾項 |
本題為「何者錯誤」且為複選題(正解為BC)。考生若習慣單選題,可能只選最明顯錯的B而漏選C。計算遞迴時務必從 base case (n=1) 逐層往外推,切忌心算跳步導致 demo(2) 算錯。