ハノイの塔
JavaScript
_パズル&クイズ へ戻る
大学生のための数学 へ戻る
2017.01.12
再帰関数の例としてよくハノイの塔のプログラムが紹介されます。
十進
BASIC
> 十進
BASIC
_パズル&クイズ > ハノイの塔の解法
にある十進
BASIC
のプログラムをそのまま
JavaScript
に移植しました。 ところが、 皿の数に関して小細工をしないと正常に作動しないのです。 なぜなの?
大きさの異なる相似形をした皿が n枚 あります。 皿の直径は等比数列になっています。 それらは全て、 地点1 に重ね置かれています。 上に行くほど小さな皿になるようにして。 皿を置くことのできる地点には 地点1 の他に 地点2 と 地点3 があります。 そこで、 他の皿に触れることなく1枚ずつ皿を移動させて、 同じ地点に置かれた皿は必ず上に行くほど小さくなるように重ねていき、 地点1 に重ね置かれていた皿をすべて 地点2 に移動させるには、 最小で何回皿を移動させなければならないでしょうか?
皿の数?
上記のプログラムに似ていますが、 別のプログラムもあります。
皿の数?
手数は
手です。 ちなみに、 2の
乗 − 1 =
参照 : ゼロからわかるJavaScript超入門 河西朝雄 著 ( 技術評論社 )
n 枚の皿からなるハノイの塔を移動させるには最低 2
n
−1 回 の手技が必要です。
それを導いてみましょう。
1 番大きな皿の移動回数 : 1 回
2 番目に大きな皿の移動回数 : 2 回
3 番目に大きな皿の移動回数 : 2
2
回
4 番目に大きな皿の移動回数 : 2
3
回
・
・
1 番小さな皿の移動回数 : 2
n−1
回
したがって、
1 + 2 + 2
2
+ 2
3
+ ・ ・ ・ + 2
n−1
( 等比数列の和の公式より )
※ 参照 :
確率と統計学 > ハノイの塔の漸化式