汉诺塔问题

原理

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号a、b、c),在A杆自下而上、由大到小按顺序放置n个金盘(如图)。

游戏的目标:把A杆上的金盘全部移到c杆上,并仍保持原有顺序叠好。

操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于a、b、c任一杆上。

image

步骤

  1. 将n-1个盘子通过c移动到b,n-1个盘子看作是一个整体
  2. 将第n个盘子从a移动到c
  3. 将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

posted @   gz_xiaohai  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示