汉诺塔问题(有点小问题)

汉诺塔问题

是什么?

汉诺塔问题,是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A、辅助柱B及目标柱C。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。问将A柱上的金盘移动到C柱上的移动步骤打印出来。

解法?

N块金盘

 

思路:我们可以将此问题运用递归的方法来进行表示,将问题规模一步一步的减小。如上图所示,步骤如下:

第一步:我们先将1—n-1块移动到B柱,再将第N块金盘移动到C柱上。若将第N块金盘移动到C柱上后,第N块金盘不需要再移动,相当于C柱上没有金盘一样。

第二步:我们再将1—n-2块移动到A柱,再将第N-1块金盘移动到C柱上。若将第N-1块金盘移动到C柱上后,第N-1块金盘不需要再移动,相当于C柱上没有金盘一样。以此往复。

程序步骤如下:

复制代码

def hannuota(i,A,B,C):
    if i==1:
       print(A+"->"+C)
       return 0
    print(A+"->"+B)
    print(A+"->"+C)
    hannuota(i-1,B,A,C)
a=int(input())
hannuota(a,'A','B','C')

复制代码

 

posted @   天空之城—我的理想国  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示