一:汉诺塔问题
所有的盘子刚开始都是放在塔座A上,要求将所有的盘子从塔座A移动到塔座C上,每次只能移动一个盘子,任何盘子不能放在比自己小的盘子上.
二:移动子树
把上层的全部看成一个整体–子树 , 每次移动后子树都在减小,最后子树剩下一个,再放到C座即可
三:递归的解决
public class HanNuoTa {
public static void main(String[] args) {
moveTower(3,'A','B','C');
}
/*
*移动盘子
* 参数;
* 1.num: 移动的盘子数量
* 2.a: 塔座A
* 3.b: 塔座B
* 4.c: 塔座C
*/
public static void moveTower(int num,char a ,char b,char c){
if (num == 1){
//只有一个盘子的时候
System.out.println("盘子1 从"+ a + "移动到"+c);
}else{
//大于一个盘子的时候
//1.意思是把上面 num-1 个盘子 从 a 移动 到 b(此时 c 作为过度塔)
moveTower(num-1,a,c,b);
//2.移动最底下那个盘子到c
System.out.println("盘子"+num+"从"+a+"移动到"+c);
//现在num-1个盘子在b塔
//3.把 b 座的个盘子移动到 c (此时 a 作为过度塔)
moveTower(num-1,b,a,c);
}
}
}
来源:CSDN
作者:是谁注册了我的2052
链接:https://blog.csdn.net/weixin_44769733/article/details/104093196