平成23年度 秋期 応用情報技術者試験 午前 問7
n個の正の整数x₁, x₂, …, xₙが並んだ線形リストを[x₁, x₂, …, xₙ]で表し,空リストは[ ]で表す。次のように再帰的に定義される関数func(L)を,L=[1, 3, 2]を実引数として呼び出したとき,print文によって表示される数字はどれか。ここで,プログラム中の=は等号,:=は代入を表す。
〔関数の定義〕
1. first([x₁, x₂, …, xₙ])はx₁を返す。
2. butfirst([x₁, x₂, …, xₙ])は[x₂, …, xₙ]を返す。butfirst([x])は[ ]を返す。
3. max(x, y)は,x≧yであればxを返し,そうでなければyを返す。
func(L)
begin
if L = [] then return 0;
A := first(L);
B := func(butfirst(L));
C := max(A, B);
print C;
return C;
end
キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:エ
print文は,再帰呼出し(B := func(butfirst(L)))から戻った後に実行されるので,リストの後ろの要素を扱う呼出しから順に表示されます。
- func([1, 3, 2]):A=1,func([3, 2])を呼ぶ
- func([3, 2]):A=3,func([2])を呼ぶ
- func([2]):A=2,func([ ])を呼ぶ → 0が返る
- func([2]):C=max(2, 0)=2 → 2を表示して2を返す
- func([3, 2]):C=max(3, 2)=3 → 3を表示して3を返す
- func([1, 3, 2]):C=max(1, 3)=3 → 3を表示
表示される数字は「2,3,3」です。
-
ア: 123
誤り。リストの要素を先頭から表示したような並びです。 -
イ: 133
誤り。最初に表示されるのは最も深い呼出し func([2]) の結果の2です。 -
ウ: 223
誤り。func([3, 2]) では max(3, 2)=3 が表示されます。 -
エ: 233
正しい。2,3,3の順に表示されます。
答え
エ: 233
出典:平成23年度 秋期 応用情報技術者試験 午前 問7