理解汉诺塔递归

三个盘子的汉诺塔你总会吧:
理解汉诺塔递归
文章图片
理解汉诺塔递归
文章图片
【理解汉诺塔递归】然后你移完发现左边柱子下面又蹦出来一个盘子
理解汉诺塔递归
文章图片
好吧, 那就把中间的柱子看成目标柱
理解汉诺塔递归
文章图片
然后把最大的移到右边, 然后就和搬三个一模一样了
理解汉诺塔递归
文章图片
更多的话也是一样的...
理解汉诺塔递归
文章图片
把a上面n-1个盘子看做一个整体,这样a上面就剩下两个盘子了,(n,n-1)

  1. 把n-1个整体借助于c先移动到c
  2. 把第n个移动到c
  3. 把b上面的n-1个盘子借助于a移动到c
Java代码就是
public static void hanoi(int n, char a, char b, char c) { if (n == 1) { //如果只剩下一个盘子,直接从a移动到c System.out.println("Move " + n + " from " + a + " to " + c); } else { //把n-1个盘子从a移动到b借助于c hanoi(n - 1, a, c, b); //把第n个盘子从a移动到c System.out.println("Move " + n + " from " + a + " to " + c); //把n-1个盘子从b移动到c借助于a hanoi(n - 1, b, a, c); } }

    推荐阅读