農會 資訊管理類 110 年 · 第 40 題 農會 資訊管理類 程式設計 110 年 第 40 題 單選題
以下為C語言程式,請問輸出為何?
#include <iostream>
using namespace std;
int test3(int a)
{
if (a<10)
return a+test3(a+2);
else
return 7;
}
int main()
{
cout<<test3(2);
return 0;
} C 正確答案
本題考遞迴函式展開,將每次呼叫的引數與回傳值由內向外逐步相加,最終結果為 27。
為什麼答案是 C 正確加總所有遞迴層級的 a 值與終止條件回傳值:2+4+6+8+7 = 27。
考點:遞迴計算 考點:漏加Base Case 考點:正確展開 考點:邊界條件誤判
載入中…
完整詳解 Pro · 無限 重點 本題考遞迴函式展開,將每次呼叫的引數與回傳值由內向外逐步相加,最終結果為 27。
列表追蹤 a 值:2, 4, 6, 8, 10。當 a=10 觸發 else 回傳 7,將 2+4+6+8+7 加總即得 27。
逐選項分析 A 遞迴計算 ✕
計算錯誤,可能只加總了部分數字或漏加終止條件的回傳值 7。
B 漏加Base Case ✕
只加總了遞迴過程中的 a 值 (2+4+6+8=20),卻忘記加上終止條件回傳的 7。
C 正確展開 ✓ 正確
正確加總所有遞迴層級的 a 值與終止條件回傳值:2+4+6+8+7 = 27。
D 邊界條件誤判 ✕ 陷阱
誤將 a=10 也加入總和 (2+4+6+8+10=30),忽略 a=10 時會直接回傳 7 而非 10。
遞迴呼叫展開與回推過程 呼叫順序 引數 a 條件判斷 (a<10) 執行動作與回傳值 第 1 層 2 成立 return 2 + test3(4) 第 2 層 4 成立 return 4 + test3(6) 第 3 層 6 成立 return 6 + test3(8) 第 4 層 8 成立 return 8 + test3(10) 第 5 層 10 不成立 return 7 (終止條件)
考生常將 a=10 誤認為仍需加入總和(2+4+6+8+10=30),但當 a=10 時條件 a<10 不成立,會直接執行 else 區塊回傳 7,而非回傳 10。