プログラミングの基礎(擬似言語のトレース)
次の手続 p を p(3) として呼び出したとき、出力される値の並びはどれか。
○p(整数型: n)
if (n > 0)
p(n − 1)
出力 n
p(n − 1)
endif
- A1, 1, 2, 1, 1, 2, 3
- B3, 2, 1, 1, 2, 1, 1
- C1, 2, 1, 3, 1, 2, 1
答えと解説を見る
正解:C. 1, 2, 1, 3, 1, 2, 1
p(1) は p(0)、1の出力、p(0) の順に実行するので「1」だけを出力します。p(2) は p(1)、2の出力、p(1) なので「1, 2, 1」です。p(3) は p(2) の「1, 2, 1」、3の出力、もう一度 p(2) の「1, 2, 1」で、1, 2, 1, 3, 1, 2, 1 になります。出力は 2³ − 1 = 7 個で、3枚のハノイの塔で動かす円盤の番号の順と同じです。
- A. 2回の再帰呼出しの後で出力する場合の並びです。
- B. 再帰呼出しの前に出力する場合の並びです。
- C. 正しい。p(2) の出力、3、p(2) の出力の順です。