对于汉诺塔个人的理解
汉诺塔问题写的时候先去想着写了一个时候的情况,此时为A->C
然后类推多个的时候,可以想成把上面看成一个整体,第一步把这个整体移动到b,写出A->B
接下来把最底下的盘子移动到C,写出A->C
下面去考虑B柱子上的整体,这个整体可以看作一个新的汉诺塔,不过起始点变成了B,比最初的汉诺塔少了一层
B柱这个新的汉诺塔可以看作以B柱为新的起点,A柱为中间柱,C柱为终点的新汉诺塔
之后考虑如何移动这个新的汉诺塔,调用本来写好的move()方法,一层层的递归,最终递归到num == 1,需要注意的是方法定义的时候的ABC都是形参,实际运行时指的柱子并不一样
参考
参考链接
代码
public class HanoiTower {
public static void main(String[] args) {
Tower tower = new Tower();
tower.move(3, 'A', 'B', 'C');
}
}
class Tower {
//方法
//num 要移动的个数 ABC 柱子
public void move(int num, char A, char B, char C) {
if (num == 1) {
System.out.println(A + "->" + C);
} else {
//移动上面的所有盘到B,借助C
move(num - 1, A, C, B);
System.out.println(A + "->" + C);
move(num - 1, B, A, C);
}
}
}