古典的なハノイの問題があります。私はこの再帰の問題に取り組んでいます。これは完全に機能していますが、どのように機能するのかわかりません! 私が理解しているように、任意の n に対して、"from + " going to " + through" と出力されます。これは、n が 1 に近づくたびに発生します。n=1 でコードが停止すると考えられます。それでも、「thru +」から「+ to」への出力(最後の出力)が得られます。n=1 が終了条件の場合、コードの最後の部分を「無料で」入手するにはどうすればよいでしょうか。
また、コードが反復ごとに少なくとも最後の出力を実行することも期待していましたが、違います! また、この例には常に 2 つの再帰呼び出しが含まれますが、これは 1 つだけでも問題なく機能します。一体何が起こっているのですか?このコードはどのように実行されますか? 再帰メソッドに関する基本的な事実を誤解していませんか? (Eclipse コンパイラーでコンパイル)。
public static void hanoi(char from, char to, char thru, int n) {
if (n==1) {
System.out.println(from + " going to " + to);
} else {
System.out.println (from + " going to " + thru);
hanoi(from, to, thru, n-1);
System.out.println (thru + " going to " + to);
}
}