修了試験 2018-01-28実施分 基本情報技術者試験 問7
再帰的に定義された手続procで,proc(5)を実行したとき,印字される数字を順番に並べたものはどれか。 proc(n) n=0ならば戻る そうでなければ { nを印字する proc(n-1)を呼び出す nを印字する } を実行して戻る
正答2
解説
正解は2です。 再帰呼出しの実行順序をたどる問題です。 proc(n)は、nを印字し、proc(n-1)を呼び出し、もう一度nを印字します。 n=0のときは何も印字せずに戻ります。 【計算】 proc(5)は、まず5を印字してproc(4)を呼び出します。 同様に、proc(4)が4、proc(3)が3、proc(2)が2、proc(1)が1を印字します。 proc(1)が呼び出したproc(0)は、何も印字せずに戻ります。 戻ったproc(1)は、2回目の印字で1を印字して終了します。 続いて、proc(2)が2、proc(3)が3、proc(4)が4、proc(5)が5を印字します。 印字の順番は、5、4、3、2、1、1、2、3、4、5です。 【選択肢別解説】 1:× 543212345は1が1回しかありません。 proc(1)は呼出しの前後で1を2回印字します。 2:○ 5432112345は、呼出し前の印字と戻った後の印字を正しく並べたものです。 3:× 54321012345は0を印字していますが、proc(0)は何も印字せずに戻ります。 4:× 543210012345も0を印字しており、n=0のときは印字しないという定義に反します。 【ポイント】 再帰呼出しでは、呼出し前の処理は深くなる順に、呼出し後の処理は戻る順(逆順)に実行されます。 終了条件のn=0では何も印字しない点を見落とさないようにします。まとめて解く
修了試験 2018-01-28実施分を通しで解く(80問)→