美文网首页
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