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

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

本文通过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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。