美文网首页
理解汉诺塔递归

理解汉诺塔递归

作者: adXiang | 来源:发表于2018-01-04 13:53 被阅读69次

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:理解汉诺塔递归

          本文链接:https://www.haomeiwen.com/subject/ehdrnxtx.html