Python递归实现汉诺塔算法详解

Evan
Evan
发布时间:2026-10-14 | 2人浏览过
原创

本文通过Python代码详解汉诺塔问题的求解逻辑。文章首先定义了汉诺塔的游戏规则,包括三根柱子和圆盘大小限制,随后展示了递归函数的实现方式。通过4层汉诺塔的运行实例,验证了递归移动圆盘的正确性及总步数计算,适合初学者理解递归思想。

Python递归实现汉诺塔算法详解

本文提供了使用Python语言解决汉诺塔问题的完整代码示例,供读者参考学习。

一、问题定义

根据百度百科的定义,汉诺塔(又称河内塔)源自印度古老的传说益智玩具。故事背景是大梵天创造世界时竖立了三根金刚石柱子,并在其中一根柱子上按从下到上、从小到大的顺序堆放了64片黄金圆盘。大梵天要求婆罗门借助其中一根柱子,将这64片圆盘重新移动到第三根柱子上。移动规则严格规定:每次只能移动一个圆盘,且小圆盘上不能放置大圆盘。

以3片黄金圆盘为例,为满足上述规则,必须按照图示的8个步骤进行操作:

二、代码实现


# 将n个盘子借助y柱从x柱移动到z柱
def hanoi(n, x, y, z):

 count = 0
 if n == 1: # 递归出口
  print(x, ' --> ', z)
  return 1
 else:
  # 将前n - 1个盘子借助z柱从x柱移动到y柱上
  count += hanoi(n - 1, x, z, y) # 递归调用

  # 将最底下的1个盘子从x柱移动到z柱上
  count += hanoi(1, x, y, z)

  # 将n - 1个盘子借助x柱从y柱移动到z柱上
  count += hanoi(n - 1, y, x, z) # 递归调用

  return count


def main():

 hanoi_level = input("请输入汉诺塔层数:")
 print("总共移动次数为%d" % hanoi(int(hanoi_level), 'X', 'Y', 'Z'))


if __name__ == '__main__':
 main()

当设定黄金圆盘层数为4层时,程序输出的具体移动过程如下:


请输入汉诺塔层数:4
X --> Y
X --> Z
Y --> Z
X --> Y
Z --> X
Z --> Y
X --> Y
X --> Z
Y --> Z
Y --> X
Z --> X
Y --> Z
X --> Y
X --> Z
Y --> Z
总共移动次数为15

以上内容为本文的全部介绍,希望能为读者的学习提供有益帮助,同时也欢迎大家对本站给予支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表