ハノイの塔


https://programmers.co.kr/learn/courses/30/lessons/12946

ハノイの塔


問題の説明
ハノイタワーはパズルの一種です.3本の柱とこの機動に挿入できる様々な大きさの円板があり、パズルを始める前に、1本の柱に円板が順番に積み上げられ、小さく上に置かれます.ゲームの目的は、次の2つの条件を満たす場合に、1本の柱に挿した円板を順番に別の柱に移し、積み上げ直すことです.
一度に1つのディスクしか移動できません.
大きな円板は小さな円板にはできません.
ハノイタワーの3本の柱は、左から1番、2番、3番と呼ばれています.1番にはn個の円板があり、このn個の円板を3番の円板の最小回数に移動しようとします.
1番柱の円板の個数nをパラメータとした場合、n個の円板を3番円板の最小に移動する方法を返す解を完了します.
せいげんじょうけん
nは15未満の自然数である.
I/O例
nresult2[ [1,2], [1,3], [2,3] ]
この問題を解決する前に、ハノイの塔がどのように動いているのかを見てみました.
そして再度質問を確認したところ、どう答えたらいいのかわからず、他人の回答を確認した.
function solution(n) {
    var answer = [];
    const hanoi = (n,s,m,e) => {
        if(n === 1) {
            answer.push([s,e])
            return;
        }   
        hanoi(n-1,s,e,m);
        answer.push([s,e]);
        hanoi(n-1,m,s,e);
    }
    hanoi(n,1,2,3)
    
    return answer;
}
正直、答えを見てもどうするか分からないので、デバッガについて質問を確認しました.
まずnが4番の場合を考えました.
nが1になるまで、家に帰ります.△奇数ハノイの塔と偶数ハノイの塔は行動が違うと思うので、eとmは変わり続けます.
nが1の場合、sは1 eが2の状態であり、まず最小のディスク(以下、Aと略す)を2番格子に入れる.
これにより,nが1のとき,帰宅が終わり,nが2の帰宅が始まる.answer.push([s,e])この場合,sは1 eに等しく,3 mは2に等しく,[1,3]は正解に追加される.第2の小皿(以下B)は第3の格子に移動する.
そして再び帰宅し、hanoi(1,2,1,3)が進むにつれて、正解にまた追加された[2,3].AはBに上がる.
理想状態では,nは2人の再帰が終わり,nは3人の再帰hanoi(3,1,2,3)が行われる.
正解に[1,2]を入れ、ディスクCを2番目の格に置きます.
次にhanoi(2,3,1,2)は再帰関数を再開する.
[3,1]の増加に伴いAは1号車に移動し、[3,2]Bは2号車に移動した.そしてAは再び2番目の格子に移動する.([1,2])
これでnが3の場合の復帰が終了し、nが4の場合に再び繰り返されます.
復帰に伴い、出発途中の到着に納得し始めた.
まず偶数のとき、ディーゼルが2番奇数のとき、ディーゼルが3番で、2番と3番を繰り返します.
復帰にはまだ多くの不足と困難がある.皆さんにもっと理解してもらうために勉強します.
参考資料
https://after-newmoon.tistory.com/85