初投稿です。
去年の冬ぐらいに、エッチな画像をPythonでスクレイピングするスクリプトを書き、それをキッカケにプログラミングを始めました。
最近はRustにハマっています(理解しているとは言っていない)。
今後もよろしくお願いします。
今回の内容はRustでハノイの塔を攻略してみました。
#ハノイの塔とは
ざっくり言うと、上の画像の円盤を真ん中の棒(または右端の棒)に移動させるというものです。
ただし、以下のルールがあります。
・リスト小さい円盤の上に大きい円盤を乗せてはいけない。
・一度に移動出来る円盤は一枚のみ。
#とりあえず
以下、コードです。今回は左端から右端へと円盤を移動させます。
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関数が実行されるんだと納得しました。
#感想
関数あたりの話はもう理解したと思っていましたが、実際にはまだまだ理解出来ていませんでした。もし、この記事を読んでいるプログラミング初学者の方がいらっしゃったら、ハノイの塔は再帰呼び出しの勉強をするのに最適かと思います。
見ての通り、プログラミングに関してはまだまだ勉強足らずなところがあるので、何か気づいた点がありましたらコメントしてくださるととても嬉しいです。
それではまた!