理解汉诺塔递归

三个盘子的汉诺塔你总会吧:

理解汉诺塔递归_第1张图片

然后你移完发现左边柱子下面又蹦出来一个盘子

理解汉诺塔递归_第2张图片

好吧, 那就把中间的柱子看成目标柱

理解汉诺塔递归_第3张图片

然后把最大的移到右边, 然后就和搬三个一模一样了

更多的话也是一样的...

把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);
    }
}

你可能感兴趣的:(理解汉诺塔递归)