この質問をして申し訳ありませんが、他の既存のスレッドは役に立ちませんでした。複雑なトピックに頭を悩ませるのは難しいと言わざるを得ません。大変申し訳ございません。とにかく、以下を解析しようとしましたが、何かがおかしいです。
public class tower {
public static void move(int n, int startPole, int endPole) {
if (n== 0){
return;
}
int intermediatePole = 6 - startPole - endPole;
move(n-1, startPole, intermediatePole);
System.out.println("Move " +n + " from " + startPole + " to " +endPole);
move(n-1, intermediatePole, endPole);
}
public static void main(String[] args) {
move(2, 1, 3);
}
}
コードを解析するのに役立つように、いくつかのメモを走り書きしました。
move(2,1,3)
move(1,1,2)
n==0
--------going back up
n==0
move(1,1,2)
Move 1 from 1 to 2
move(2,1,3)
Move 2 from 1 to 3
move(2,1,3)
move(1,2,3)
n==0
-------going back up
n==0
move(1,2,3)
Move 1 from 2 to 3
move(2,1,3)
?????????? (step is missing)
2 番目の再帰呼び出しが途中で停止し、見落としていることを知りたいと思いました。
反復コードの方がはるかに理解しやすいことがわかり、反復アルゴリズムに基づいて再帰アルゴリズムを作成しました。