基本情報技術者試験「再帰」の問題
次の擬似言語は、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 を取り違える、指数を多項式と混同するミスが多い。
アルゴリズムとプログラミングの他の問題
次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008,…次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1…次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10,…次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか。
```…単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード…スタックに対する push(積む)と…
この問題を、AIの8-ways解説つきで。
無料ではじめる →基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。
ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0043