アルゴリズムとプログラミング

基本情報技術者試験再帰」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は、n 枚の円盤を 3 本の杭を使って移す「ハノイの塔」で、1 枚を動かすたびに move を 1 回呼ぶ。hanoi(6, A, C, B) を実行したとき、move が呼ばれる総回数はどれか。
○手続: hanoi(整数型: n, 杭: from, 杭: to, 杭: via)
  if (n が 0 と等しい)
    return
  endif
  hanoi(n - 1, from, via, to)
  move(from, to)
  hanoi(n - 1, via, to, from)
32 回
36 回
63 回
64 回
正解
63 回

ハノイの塔の移動回数 T(n) は T(n)=2·T(n-1)+1、T(0)=0 を満たし、解くと T(n)=2 の n 乗 − 1 である。n=6 で 2 の 6 乗 − 1 = 63 回となるため ウが正しい。

?選択肢ごとの解説

ア ×2 の 5 乗 = 32 であり、n を 5 と取り違える、または −1 と指数を同時に誤った誤りである。
イ ×6×6=36 のように n を二乗するなどして、指数関数的な増加を多項式と取り違えた誤りである。
ウ ○ハノイの塔の移動回数 T(n) は T(n)=2·T(n-1)+1、T(0)=0 を満たし、解くと T(n)=2 の n 乗 − 1 である。n=6 で 2 の 6 乗 − 1 = 63 回となるため ウが正しい。
エ ×2 の 6 乗 = 64 であり、最後の −1(基底 T(0)=0 による補正)を忘れた off-by-one の誤りである。

くわしく

ハノイの塔は『n-1 枚を退避→1 枚を移動→n-1 枚を戻す』の構造から漸化式 T(n)=2T(n-1)+1 が立ち、閉じた式 2 の n 乗 − 1 になる。−1 の有無が典型的な誤答源である。

本番での押さえどころ

試験のコツ

小さい n(T(1)=1, T(2)=3, T(3)=7)で 2 の n 乗 − 1 を確認してから n=6 に適用する。

覚え方

『ハノイは 2 の n 乗から 1 引く』と公式ごと暗記する。

よくある誤り

2 の n 乗そのまま(−1 忘れ)、n を取り違える、指数を多項式と混同するミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0043

【基本情報技術者試験】再帰の問題 — 解答・解説|ukamiru 過去問