//设置程序,算出汉诺塔的放盘子到目标柱子的每一步的步骤(递归) 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); } } }