問題
三つのスタック A, B, C のいずれの初期状態も [1, 2, 3] であるとき、再帰的に定義された関数 f( ) を呼び出して終了した後の B の状態はどれか。ここで、スタックが [a1, a2, …, an−1] の状態のときに an を push した後のスタックの状態は [a1, a2, …, an−1, an] で表す。 f( ){ A が空ならば{ 何もしない。 } そうでない場合{ A から pop した値を C に push する。 f( ) を呼び出す。 C から pop した値を B に push する。 } }
選択肢
- 1[1, 2, 3, 1, 2, 3]
- 2[1, 2, 3, 3, 2, 1]
- 3[3, 2, 1, 1, 2, 3]
- 4[3, 2, 1, 3, 2, 1]
正解
1. [1, 2, 3, 1, 2, 3]
詳しい解説を見る解説を閉じる
解説
スタックは後入れ先出し(LIFO)で、[1,2,3]の右端3が先頭。f()は「Aから1つpopしてCにpush→再帰→Cから1つpopしてBにpush」を繰り返す。Aから3,2,1の順にpopしCに積み(再帰の深い順)、戻りながらCのトップから順にpopしてBへ積む。Cに積まれた順(下から3,2,1)を再帰の戻りでpopすると1,2,3の順でBに追加され、Bは初期[1,2,3]の上に1,2,3が乗って[1,2,3,1,2,3]となる。よって「ア」が正しい。(出典: 平成31年度 春期 基本情報技術者試験 午前 問6)
一問一答
科目A 180問+科目B 60問