平成23年度秋期 問7 / 80

平成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)))から戻った後に実行されるので,リストの後ろの要素を扱う呼出しから順に表示されます。

  1. func([1, 3, 2]):A=1,func([3, 2])を呼ぶ
  2. func([3, 2]):A=3,func([2])を呼ぶ
  3. func([2]):A=2,func([ ])を呼ぶ → 0が返る
  4. func([2]):C=max(2, 0)=2 → 2を表示して2を返す
  5. func([3, 2]):C=max(3, 2)=3 → 3を表示して3を返す
  6. 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

平成23年度秋期の他の問題