JavaScript递归函数实现汉诺塔算法详解

作者:代码拾荒

时间:2026-10-22

浏览:568

本文深入解析JavaScript中利用递归函数解决汉诺塔问题的算法逻辑。通过分解移动步骤,将大圆盘移动转化为子问题处理,展示了递归调用的核心机制。文章包含完整代码示例及3个圆盘的移动输出演示,帮助开发者理解递归在算法设计中的应用。

文章目录

汉诺塔游戏规则与递归思路

“汉诺塔”是一项经典的益智游戏。游戏包含三根柱子和一组直径各异的空心圆盘。初始状态下,所有圆盘按从小到大的顺序堆叠在柱子上。游戏的目标是将所有圆盘移动到目标柱子上,每次只能移动一个圆盘,且在移动过程中,严禁将较大的圆盘放置在较小的圆盘之上。

仔细解读这段话,如果有10个圆盘甚至更多,那操作步骤绝对多到让人震惊,但目标是把一堆圆盘移动到目标柱子上,如果把上面的9个圆盘看成一套,第10个圆盘看成另一套,先移动9个圆盘到另一根柱子上,再把上面8个圆盘看成一套,第9个圆盘看成另一套……依次类推,分解移动,递归函数的思想就体现出来了。

JavaScript递归代码实现

以下是实现该逻辑的代码,写法简洁明了。读者可思考是否还有更简化的实现方式。

核心算法代码


var hanoi = function {disc, begin, end, helper) {
 if (disc > 0) {
  hanoi(disc - 1, begin, helper, end);
  document.writeln('移动圆盘 ' + disc + ' 从 ' + begin + ' 到 ' + helper);
  hanoi(disc - 1, end, begin, helper);
 }
};
hanoi(3, '柱子一', '柱子二', '柱子三');

运行结果示例

当圆盘数量为3时,程序输出如下:

移动 1 从 柱子一 到 柱子三 移动 2 从 柱子一 到 柱子二 移动 1 从 柱子三 到 柱子二 移动 3 从 柱子一 到 柱子三 移动 1 从 柱子二 到 柱子一 移动 2 从 柱子二 到 柱子三 移动 1 从 柱子一 到 柱子三

函数参数与执行逻辑分析

传递给hanoi函数的参数包括当前待移动的圆盘编号以及涉及的三根柱子名称。函数在调用自身时,负责处理当前圆盘上方的所有圆盘。当递归调用到达一个不存在的圆盘编号(即disc <= 0)时,函数不执行任何操作并返回。由于该函数对非法或边界值不予处理,因此无需担心会导致死循环。

总结

总结

以上介绍了使用JavaScript递归函数解决汉诺塔算法的代码解析,希望能为读者提供帮助。如有任何疑问,欢迎留言交流,小编会及时回复。感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章