美文网首页
Python 汉诺塔的实现

Python 汉诺塔的实现

作者: 跟我去北方吧 | 来源:发表于2018-01-30 18:17 被阅读0次

    汉诺塔的实现,是一个典型的递归问题,当然越是复杂的递归问题越是考验人的抽象思维;

    哈哈哈,言归正传,汉诺塔问题如下:

    请编写move(n, a, b, c)函数
    它接收参数n:表示3个柱子A、B、C中第1个柱子A上的圆盘数量
    然后打印出把所有盘子从A借助B移动到C的方法;

    下面我们分步来解析:
    第一步,抽象出函数的意义:

    def  move(n,a,b,c): #函数的抽象意义就是:把n个圆盘从a柱上借助b柱移动到c柱上;
    

    第二步,退一步抽象:

    如果我们想把n个圆盘从a柱上借助b柱移动到c柱上,那么我们需要先把n-1个圆盘从a柱借助c柱移动到b柱上;


    1.JPG
    既然我们刚才已经抽象出了move(n,a,b,c)函数的意义是把n个圆盘从a柱上借助b柱移动到c柱上;
    那么我们第二步需要n-1个圆盘从a柱借助c柱移动到b柱上
    调用函数表达就是:move(n-1,a,c,b)
    

    第三步:

    然后,我们需要把a柱上剩余的一个圆盘借助b柱移动到c柱;


    2.JPG
    同理,我们第三步需要把a柱上剩余的一个圆盘借助b柱移动到c柱
    调用函数表达就是:move(1,a,b,c)
    

    第四部:
    最后,我们需要把n-1个圆盘从b柱上借助a柱移动到c柱上;


    3.JPG
    同理,第四步需要把n-1个圆盘从b柱上借助a柱移动到c柱上
    调用函数表达就是:move(n-1,b,a,c)
    

    通过上面四步基本已经完成了递归函数的实现,只需要再加上n=1时的额外判断即可;
    代码如下

    #汉诺函数
    def move(int,a,b,c):
        if int==1:
            print(a,'-->',c)
            return
        move(int-1,a,c,b)
        move(1,a,b,c)
        move(int-1,b,a,c)
    
    def main():
           #将三个圆盘从A柱移动到C柱
           move(3,'A','B','C')
    

    最终,运行输出结果如下:

    A --> C
    A --> B
    C --> B
    A --> C
    B --> A
    B --> C
    A --> C
    

    相关文章

      网友评论

          本文标题:Python 汉诺塔的实现

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