汉诺塔的个人理解

对于汉诺塔个人的理解

  • 汉诺塔问题写的时候先去想着写了一个时候的情况,此时为A->C
  • 然后类推多个的时候,可以想成把上面看成一个整体,第一步把这个整体移动到b,写出A->B
  • 接下来把最底下的盘子移动到C,写出A->C
  • 下面去考虑B柱子上的整体,这个整体可以看作一个新的汉诺塔,不过起始点变成了B,比最初的汉诺塔少了一层
  • B柱这个新的汉诺塔可以看作以B柱为新的起点,A柱为中间柱,C柱为终点的新汉诺塔
  • 之后考虑如何移动这个新的汉诺塔,调用本来写好的move()方法,一层层的递归,最终递归到num == 1,需要注意的是方法定义的时候的ABC都是形参,实际运行时指的柱子并不一样

参考

参考链接

代码

public class HanoiTower {
    public static void main(String[] args) {
        Tower tower = new Tower();
        tower.move(3, 'A', 'B', 'C');
    }

}

class Tower {

    //方法
    //num 要移动的个数 ABC 柱子
    public void move(int num, char A, char B, char C) {
        if (num == 1) {
            System.out.println(A + "->" + C);
        } else {
        //移动上面的所有盘到B,借助C
            move(num - 1, A, C, B);
            System.out.println(A + "->" + C);
            move(num - 1, B, A, C);
        }
    }

}
posted @ 2022-06-29 14:31  AINIBYM  阅读(76)  评论(0)    收藏  举报