基本情報技術者試験平成31年春期問6

スタック操作と再帰関数の理解を深める技術者試験問題

三つのスタックA,B,Cのいずれの初期状態も[1,2,3]であるとき,再帰的に定義された関数ƒ()を呼び出して終了した後のBの状態はどれか。

ここでスタックが

a1,a2…,an-1

の状態のときに

an

をpushした後のスタックの状態は

a1,a2,…,an-1,an

で表す。

ƒ(){
Aが空ならば {
何もしない
} そうでない場合 {
Aからpopした値をCにpushする。
ƒ()を呼び出す
Cからpopした値をBにpushする
}
}
×不正解です

問題文はややこしいですが、プログラミング通りにやっていけば楽に解くことができます。

  • Aは空ではないので、Aからpopした値をCにpushします
  • Aからpopする値は最後尾の3です
  • A[1, 2] C[1, 2, 3, 3]
  • Aは空ではないので、Aからpopした値をCにpushします
  • Aからpopする値は最後尾の2です
  • A[1] C[1, 2, 3, 3, 2]
  • Aは空ではないので、Aからpopした値をCにpushします
  • Aからpopする値は最後尾(最後)の1です
  • A[] C[1, 2, 3, 3, 2, 1]
  • Aが空なのでƒ()を抜けます
  • Cからpopした値をBにpushする
  • C[1, 2, 3, 3, 2] B[1, 2, 3, 1]

プログラムはこれで終了なので、実際、問題文のように解くと

B[1, 2, 3, 1]

こちらが答えになりますが、どうやらIPA側のミスのようです。

1, 2, 3, 1に近い選択肢は1, 2, 3, 1, 2, 3なのでアが正解ということにしておきましょう。

回答数 1
正解率 0%