見出し画像

Swiftで行こう!- Tower of Hanoi!

ハノイの塔と言うゲームがあります。ルールは一般的に

1. 3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。
2. 最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。
3. 円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。

プログラミングで再帰を使ってやってみます。

func hanoi(num:Int, from: String, dst: String, to: String){
   if num > 0{
      
       hanoi(num: num - 1, from: from, dst: to, to: dst)
       
       print("\(num) " + "from " + from + " to " +  dst)
       
       hanoi(num: num - 1, from: to, dst: dst, to: from)
           
   }
   
}

基本的には目的のディスクから1を引いた数を解いて行きます。(num-1)と言うことですね。いわゆる数学で言う漸化式です。

hanoi(num: 3, from: "left", dst: "center", to: "right")

を実行すると

1 from left to center
2 from left to right
1 from center to right
3 from left to center
1 from right to left
2 from right to center
1 from left to center

1,2,1,3,1,21はディスクの番号、あとはleft,right,centerと動かしていきます。少しややこしいけど、しっかりと動いて行きます。

基本的に関数の引数を入れ替えていくだけです。

func hanoi(num:Int, from: String, dst: String, to: String)のnum.from,dst,toですね。簡単そうで理解がちょっと難しい感じがします。

この記事が気に入ったらサポートをしてみませんか?