初考-統計資料處理大意110 年第 35 題單選題
求下列 C 語言遞迴函數值 ds(5)=? int ds(int n){if(n<=2)return 1;else return (ds(n-3)+ds(n-2)+ds(n-1)+2);}
D正確答案
解遞迴題最穩的方法是「由下而上」推導。先找出終止條件 ds(n<=2)=1,再依序算出 ds(3)、ds(4),最後求得 ds(5)=17。
為什麼答案是 D
正確答案。依序推導:ds(3)=5,ds(4)=ds(1)+ds(2)+ds(3)+2=1+1+5+2=9,ds(5)=ds(2)+ds(3)+ds(4)+2=1+5+9+2=17。
載入中…
完整詳解
Pro · 無限重點 解遞迴題最穩的方法是「由下而上」推導。先找出終止條件 ds(n<=2)=1,再依序算出 ds(3)、ds(4),最後求得 ds(5)=17。
列出基礎值 ds(0)=ds(1)=ds(2)=1。接著套公式:ds(3)=1+1+1+2=5;ds(4)=1+1+5+2=9;ds(5)=1+5+9+2=17,秒殺!
逐選項分析
A✕ 陷阱
5 是 ds(3) 的計算結果(ds(0)+ds(1)+ds(2)+2 = 1+1+1+2 = 5)。若考生只算到第一層遞迴就停止,會誤選此答案。
B✕
8 為錯誤的計算數值。可能是計算過程中漏加了常數 2,或是基礎值代入錯誤所致。
C✕
16 為錯誤的計算數值。可能是最後一步 ds(5) = 1 + 5 + 9 + 2 時,漏算了某個基礎值或加法失誤。
D✓ 正確
正確答案。依序推導:ds(3)=5,ds(4)=ds(1)+ds(2)+ds(3)+2=1+1+5+2=9,ds(5)=ds(2)+ds(3)+ds(4)+2=1+5+9+2=17。
遞迴函數 ds(n) 執行追蹤表
| n 值 | 函數展開 | 計算過程 | 回傳結果 |
|---|
| 0, 1, 2 | n <= 2 (終止條件) | 直接回傳 1 | 1 |
| 3 | ds(0) + ds(1) + ds(2) + 2 | 1 + 1 + 1 + 2 | 5 |
| 4 | ds(1) + ds(2) + ds(3) + 2 | 1 + 1 + 5 + 2 | 9 |
| 5 | ds(2) + ds(3) + ds(4) + 2 | 1 + 5 + 9 + 2 | 17 |
考生常犯兩個錯誤:第一是計算 ds(3) 時,會遇到 ds(0),忘記 n=0 也符合「n<=2」的條件而卡住;第二是遞迴式最後有一個常數「+2」,在層層展開手算時極易漏加。