0
点赞
收藏
分享

微信扫一扫

python递归实例:汉诺塔问题

松鼠树屋 2022-03-23 阅读 45

目录

问题实例

在这里插入图片描述

以三个圆盘为例的移动过程分析

以三个圆盘为例
在这里插入图片描述

第一步

把最上方的小圆盘移动到中间的柱子上
在这里插入图片描述

第二步

把绿色圆盘移动到右面的柱子上
在这里插入图片描述

第三步

中间的移动到右面
在这里插入图片描述

第四步

左面的移动到中间
在这里插入图片描述

第五步

右面柱子最上面的圆盘移动到左边柱子
在这里插入图片描述

第六步

右面的圆盘移动到中间的柱子
在这里插入图片描述

第七步

最左面最小的圆盘移动到中间位置
在这里插入图片描述
至此,大功告成!

n个盘子分析

n个盘子的初始状态
在这里插入图片描述
第一步,将上面N-1个盘子看作整体,会经过C,移动到B
这一步不明白的,可以自行模拟4-5个盘子尝试,亲测是可以的
在这里插入图片描述
第二、三步
在这里插入图片描述
在递归过程中,第2步可以省略,只移动一次不算在递归中,重要的是第一、三步

递归代码

我们省略了移动过程中繁琐的代码,通过递归,让计算机去实现,只需要告诉计算机单个问题时的移动过程,让计算机递归迭代

def hanoi(n,a,b,c):
    if n>0:
        hanoi(n-1,a,c,b)  # a->c->b   # 对应1步
        print("moving from %s to %s"%(a,c)) # 对应2步
        hanoi(n-1,b,a,c)   # 对应3步

hanoi(3,'A','B','C')

结果

在这里插入图片描述
依然是7步,符合验证
在这里插入图片描述

举报

相关推荐

0 条评论