所以我们有经典的河内问题,我刚刚进入这个递归的东西,它是一个doozie!这是功能齐全的,但我只是不明白它是怎么回事!据我了解,对于任何 n,它将打印“从 +”到“+ thru”,这将在每次 n 接近 1 时发生。人们会认为在 n=1 时,代码会停止,然而我得到了“thru +”的打印输出到“+ to”(最后一个打印输出)。如果 n=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);
}
}