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

分野:アルゴリズムとプログラミング(データ構造・アルゴリズム・探索整列・計算量の実際・擬似言語・プログラム言語・データ記述言語)|実際に出題されたIPA過去問題

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

  1.  123
  2.  133
  3.  223
  4.  233
解答・解説を見る

正解:エ

AI解説

再帰呼出しを最深部から追う。func([])=0(printなし)。func([2])はA=2,B=0,C=max(2,0)=2を表示し2を返す。func([3,2])はA=3,B=2,C=max(3,2)=3を表示し3を返す。func([1,3,2])はA=1,B=3,C=max(1,3)=3を表示し3を返す。printは再帰の戻り(returnの直前)で実行されるため、表示順はリストの末尾側から2,3,3となり、エの233が正解である。 ア: 123は、printが再帰呼出しの前に先頭要素をそのまま表示すると誤解した場合の値である。 イ: 133は、途中のmax計算を誤った(2番目の表示を先頭要素1と末尾の比較と取り違えた)場合の値である。 ウ: 223は、表示順や最後のmax(1,3)の評価を誤った場合の値である。 エ: 正しい。再帰の最深部から順にC=2,3,3が表示されるため233となる。この関数は末尾からの最大値を順に表示している。 💡 再帰のトレースは「呼出しを深く潜ってから、戻りながら実行される処理(print)を拾う」のが鉄則。呼出しの木を書き、returnの値を下から埋めていくとミスしない。

出典:平成23年度 秋期 応用情報技術者試験 午前 問7 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「アルゴリズムとプログラミング」分野の攻略ポイント

データ構造・アルゴリズム・探索と整列・計算量・擬似言語・プログラム言語・データ記述言語が対象です。擬似言語のトレースは時間はかかるものの、落ち着いて表を書けば必ず正解にたどり着く「確実に取れる」問題です。

アルゴリズムとプログラミングの攻略ポイントをすべて見る(要点6項目・ひっかけ3項目)→

同じ分野(アルゴリズムとプログラミング(データ構造・アルゴリズム・探索整列・計算量の実際・擬似言語・プログラム言語・データ記述言語))の過去問