我在理解这个汉诺塔递归算法时遇到问题:
public class MainClass {
public static void main(String[] args) {
int nDisks = 3;
doTowers(nDisks, 'A', 'B', 'C');
}
public static void doTowers(int topN, char from, char inter, char to) {
if (topN == 1){
System.out.println("Disk 1 from " + from + " to " + to);
}else {
doTowers(topN - 1, from, to, inter);
System.out.println("Disk " + topN + " from " + from + " to " + to);
doTowers(topN - 1, inter, from, to);
}
}
}
输出是:
Disk 1 from A to C
Disk 2 from A to B
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
Disk 2 from B to C
Disk 1 from A to C
我不明白我们如何得到:
Disk 1 from C to B
Disk 3 from A to C
Disk 1 from B to A
有人可以解释一下吗?
谢谢。
最佳答案
将 N-1 个(除最后一个以外的所有圆盘)塔从 A 移动到 B,然后将第 N 个圆盘从 A 移动到 C,最后移动塔,即可将 N 个圆盘塔从挂钉 A 移动到 C之前移动到 B,从 B 到 C。任何时候移动具有多个磁盘的塔时都应应用此方法,在 1 磁盘塔的情况下,您只需移动其唯一的磁盘。
关于java - 汉诺塔递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483764/