//设置程序,算出汉诺塔的放盘子到目标柱子的每一步的步骤(递归)
public class Test{
public static void main(String[] args) {
Way way = new Way();
way.move(3,'A','B','C');
}
}
class Way{
//a为A塔,b为B塔,c为C塔
public void move(int num,char a,char b,char c){
if(num == 1)
System.out.println(a + "--->" + c);
else {
//多个盘子时,要一个一个分析实在是太太复杂了,人脑很难承受
//但是我们可以发现,汉诺塔其实不管多少个盘子,算法是一样的
//那么用化繁为简和先死后活的编程思想
//我们把两个盘子时的算法写出来
//始终可以把当前递归层的一堆盘子看成两部分,
//最下面的一个盘子为一部分,其他的为一部分(num - 1)
//那么由于后面算法一样,那就将可变量设成变量(num - 1)
//这时不需要太多复杂的分析,递归就能准确完成了,相当于每层递归都在完成两个盘子的操作
//所以算法题首先要看有无规律
//(1)先把上面的盘移到b塔,借助c
move(num - 1,a,c,b);
//(2)把下面的盘子移到c塔
System.out.println(a + "--->" + c);
//(3)最后把b塔的盘子移动到c塔
move(num - 1,b,a,c);
}
}
}