IPA過去問ドリル

平成23年度 秋期 応用情報技術者試験 午前 問7

テクノロジ/アルゴリズム

n 個の正の整数 x1, x2, …, xn が並んだ線形リストを [x1, x2, …, xn] で表し,空リストは [] で表す。次のように再帰的に定義される関数 func(L) を,L=[1, 3, 2] を実引数として呼び出したとき,print 文によって表示される数字はどれか。ここで,プログラム中の=は等号,:=は代入を表す。 〔関数の定義〕 (1) first([x1, x2, …, xn]) は x1 を返す。 (2) butfirst([x1, x2, …, xn]) は [x2, …, xn] を返す。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

出典:平成23年度 秋期 応用情報技術者試験 午前 問7

正解:エ

解説

func は再帰的にリストの末尾側まで呼び出された後,戻りながらprint文が実行されます。L=[2]の処理でmax(2,0)=2をprintし,次にL=[3,2]の処理でmax(3,2)=3をprint,最後にL=[1,3,2]の処理でmax(1,3)=3をprintするため,233と出力されます。

選択肢ごとの解説

  • 誤り。printの実行順序をリストの先頭から順(1,2,3)と誤解した場合の値です。
  • 誤り。最初の呼出しでAの値である1がそのままprintされると誤解した場合の値の並びです。
  • 誤り。printされる値の順序を取り違えた場合の並びです。
  • 正しい。再帰呼出しの末尾側(L=[2])からmax(2,0)=2,max(3,2)=3,max(1,3)=3の順にprintされ233となります。
応用情報技術者の過去問を演習モードで解く