2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rustでハノイの塔

Last updated at Posted at 2018-04-14

初投稿です。
去年の冬ぐらいに、エッチな画像をPythonでスクレイピングするスクリプトを書き、それをキッカケにプログラミングを始めました。
最近はRustにハマっています(理解しているとは言っていない)。
今後もよろしくお願いします。

今回の内容はRustでハノイの塔を攻略してみました。

#ハノイの塔とは
Tower_of_Hanoi.jpeg
ざっくり言うと、上の画像の円盤を真ん中の棒(または右端の棒)に移動させるというものです。
ただし、以下のルールがあります。
・リスト小さい円盤の上に大きい円盤を乗せてはいけない。
・一度に移動出来る円盤は一枚のみ。

#とりあえず
以下、コードです。今回は左端から右端へと円盤を移動させます。

main.rs
fn hanoi(n: i32,x: &str,y: &str,z: &str){
    if n>0{
    hanoi(n-1, x, z, y);
    println!("{}枚目、{}から{}へ",n,x,z);
    //println文で円盤の移動を示す。
    hanoi(n-1, y, x, z);
    }

}

fn main() {
    println!("5枚の円盤をCの棒へ");
    hanoi(5,"a","b","c");
}


三本の棒をそれぞれ左端からa,b,cとし、円盤は5枚であるとして、hanoi関数に引数を渡します。
hanoi関数内は再帰呼び出しとなっており、n=1の時のhanoi関数からn=5の時のhanoi関数まで実行され、移動が完了となります。

#勉強になったところ
再帰呼び出しです。
実はネットに転がっていたC言語のコードを参考にして上のコードを書いたのですが(そのこともあって、上ではアルゴリズムに関しては説明を省略させてもらってます・・・)、n=1の時のhanoi関数が実行されるのは理解できたのですが、n=2以上のhanoi関数が実行されるのが最初はよく分かりませんでした。
結局のところ、n=5の時のhanoi関数にはn=4の時のhanoi関数が含まれ、n=4の時のhanoi関数にはn=3の時のhanoi関数が含まれ・・・となっているから、最後のn=1の時のhanoi関数が実行されると、n=2の時のhanoi関数からn=5の時のhanoi関数が実行されるんだと納得しました。

#感想
関数あたりの話はもう理解したと思っていましたが、実際にはまだまだ理解出来ていませんでした。もし、この記事を読んでいるプログラミング初学者の方がいらっしゃったら、ハノイの塔は再帰呼び出しの勉強をするのに最適かと思います。

見ての通り、プログラミングに関してはまだまだ勉強足らずなところがあるので、何か気づいた点がありましたらコメントしてくださるととても嬉しいです。
それではまた!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?