アプリ版:「スタンプのみでお礼する」機能のリリースについて

ハノイの塔のさいきアルゴリズムがめちゃ考えても全然意味わからないし再帰関数が、ほんとに苦手なんですけどすごい頭悪いってことですか?

A 回答 (3件)

再帰関数を理解するコツは「深く考えないこと」だと思ってます。



ハノイの塔のプログラムって

# n枚の円盤を ルールに従い a→bに移動する。cは一次保管先として使える
1:def hanoi(n,a,b,c)::
2: hanoi(n -1 , a,c,b )
3: n番の板を aからbへ
4: hanoi(n -1 , c,b,a )

だいたいこんなのが多いと思います。
これを細かく追い掛けて理解しようとすると「 2:で呼び出されて1:に戻って、でも nはn-1になってるしbとcは入れかわってるし、そこから2:でまた1:へもどって今度はnはn-1から-1だから... で、戻ったら...どこ?」みたいな感じで混乱するでしょう。

混乱の原因は、再帰先まで一緒に考えようとすることです。

2:,4: の hanoi を(実際にそうなるかどうかは一旦考えないで) 仕様通りに動作する完成した関数だと考えます。
そうすると、上記のプログラムは

・n枚の円盤を a→bに移動する。cは一次保管先として使える

1. (一番大きなnの円盤の上にあって邪魔な) n -1枚の円盤を ルールに従い aからcに移動する。bは一次保管先として使える
2. 一番大きな nの円盤を aからbへ移動する
3. 退避しておいた n -1枚の円盤を ルールに従い 退避先の cからbに移動する。aは一次保管先として使える

ということだ、となります、


他の再帰関数でも、呼び出した先まで追い掛けるのではなく、その関数の機能にだけ注目することが理解のコツです。
    • good
    • 1
この回答へのお礼

ありがとうございます(´;ω;`) すごい助かりました!! 質問してみてよかったです。とてもいい回答でした〜

お礼日時:2023/12/09 01:08

とりあえず、実際にやってみれば良いと思う。


1円硬貨、50円硬貨、5円硬貨、100円硬貨、10円硬貨、500円硬貨
をそれぞれ1枚ずつ用意して積み上げたらアルゴリズムに従って移し替えてみよう。

これをやり終える頃には、そのアルゴリズムについての理解が深まっているはずです。
がんばれ。
(6枚の硬貨を使うので、べらぼうな時間がかかりますが世界が終わる事はありません。大丈夫)

それで理解できないなら、マジで救いようがないくらい頭が悪いという事になります。
普通の人なら「疲れた。けど理解できた」と、なります。

・・・

(´・ω・`) ゴメンね。質問者さんのことを知らないので、こんな感じで試したうえで判断するしかないんだ。
    • good
    • 0
この回答へのお礼

はーい。ありがとうございます〜

お礼日時:2023/12/07 23:12

その通りです。

    • good
    • 0
この回答へのお礼

はうざ。

お礼日時:2023/12/06 18:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A