汉诺塔

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

 

上一篇:Rust中变量的移动move


下一篇:洛谷P3110 《[USACO14DEC]驮运Piggy Back》