- 大致描述
汉诺塔问题:有三根柱子A、B、C,在柱子A上有很多按顺序摆放的圆盘,且最大的圆盘放在最下面,最小的圆盘放在最上面。要求将这些圆盘移动到柱子C上,并且移动过程中可以借助柱子B,但是每一步都要求满足小圆盘在大圆盘上面。
- 思路
- 如果柱子A上只有一个圆盘,直接移动到柱子C即可
- 如果柱子A上的圆盘数量为 n,且 n 大于等于 2 ,就将这些盘子看成两个盘。一个是最下面的圆盘,一个是上面的 n-1 个盘(看成整体)。
- 先把最上面的盘从A移动到B
- 再把最下面的盘从A移动到C
- 再把B上的 n-1 个盘以同样的原理移动到C
public class HannoTower {
public static void main(String[] args) {
tower(5,'A','B','C');
}
public static void tower(int n,char a, char b, char c){
if (n == 1){
System.out.println(n+" : "+a+" ---> "+c);
}else {
tower(n-1, a, c, b);
System.out.println(n+" : "+a+" ---> "+c);
tower(n-1, b, a, c);
}
}
}