Python 汉诺塔问题实现

看了几个讲解的文章和视频,基本都没有很明确的说明解法。

实际上Python实现是将汉诺塔的问题归纳成了最底层的大盘子N 以及 N以上的其他盘子 N-1,以最简单的两个盘子的实现,以递归方式来解决多个盘子的问题。

环境模拟:大盘子是N,小盘子是(N-1),三个柱子:first ,second,third,大盘子在first上,借助second,全部移动到third

两个盘子怎么移动? 三个步骤即可实现:

步骤一:最小的盘子(N-1),从first上移动second

步骤二:最大的盘子N,从first上移动到到third

步骤三:最小的盘子(N-1),从second上移动到third

代码实现时候,着重注意 位置参数,这是很重要的一点,很多文章和视频都没有讲明白这个位置参数在汉诺塔实现上的问题。

复制代码
def move(start,target):
    print('Move %s' %start,'to','%s' %target)

def hannoi(n,first,second,third):
    if n == 1:
        move(first,third)
    else:
        hannoi(n-1,first,third,second) #步骤一:最小的盘子(N-1),从first上移动second
        hannoi(1,first,second,third) #步骤二:最大的盘子N,从first上移动到到third
        hannoi(n-1,second,first,third)#步骤三:最小的盘子(N-1),从second上移动到third

print('N=1')
hannoi(1,'A','B','C')
print('N=2')
hannoi(2,'A','B','C')
print('N=3')
hannoi(3,'A','B','C')
复制代码

 

posted @   黄金初级开发者  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示