汉诺塔问题
原理
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号a、b、c),在A杆自下而上、由大到小按顺序放置n个金盘(如图)。
游戏的目标:把A杆上的金盘全部移到c杆上,并仍保持原有顺序叠好。
操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于a、b、c任一杆上。
步骤
- 将n-1个盘子通过c移动到b,n-1个盘子看作是一个整体
- 将第n个盘子从a移动到c
- 将n-1个盘子从b通过a移动到c
代码
递归思想
def hanno(n, a, b, c): if n > 0: hanno(n - 1, a, c, b) print("将第 %s 个盘子从 %s 移动到 %s" % (n, a, c)) hanno(n - 1, b, a, c) hanno(3, "A", "B", "C")
输出结果
将第 1 个盘子从 A 移动到 C
将第 2 个盘子从 A 移动到 B
将第 1 个盘子从 C 移动到 B
将第 3 个盘子从 A 移动到 C
将第 1 个盘子从 B 移动到 A
将第 2 个盘子从 B 移动到 C
将第 1 个盘子从 A 移动到 C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律