JavaScript递归函数解“汉诺塔”算法代码解析

 更新时间:2018年07月05日 10:19:43   作者:缺德值  
这篇文章主要介绍了JavaScript递归函数解“汉诺塔”算法代码解析,需要的朋友可以参考下

“汉诺塔”是一个著名的益智游戏。塔上有3根柱子和一套直径各不相同的空心圆盘。开始时柱子上的所有圆盘都按照从小到大的顺序堆叠。目标是通过每次移动一个圆盘到另一根柱子,最终把一堆圆盘移动到目标柱子上,过程中不允许把交大的圆盘放置在较小的圆盘之上。

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

完成代码,非常简单的写法,不知道还有没有更简单的写法?

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函数的参数包括当前移动的圆盘编号和它将要用到的3根柱子。当它调用资深的时候,它去处理当前正在处理的圆盘之上的圆盘。最终,它会以一个不存在的圆盘编号去调用。在这样的情况下,它不执行任何操作。由于该函数对非法值不予理会,也就不用担心会导致死循环。

总结

以上所述是小编给大家介绍的JavaScript递归函数解“汉诺塔”算法代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • js实现文件流式下载文件方法详解及完整代码

    js实现文件流式下载文件方法详解及完整代码

    这篇文章主要介绍了用js实现读取文件流并下载到本地的方法,也就是我们经常说的使用js下载文件需要的朋友可以参考下
    2022-12-12
  • js拖拉表格实现内容计算

    js拖拉表格实现内容计算

    这篇文章主要为大家详细介绍了js拖拉表格实现内容计算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • node.js chat程序如何实现Ajax long-polling长链接刷新模式

    node.js chat程序如何实现Ajax long-polling长链接刷新模式

    node.js chat是node.js作者用JS写的一个多人聊天工具, 源代码公开下载,网址是chat.nodejs.org。作者用这个小例子,来展示如何用nodejs开发高效率的应用程序。对于nodejs的学习者来说,是一个很好的例子
    2012-03-03
  • js 取时间差去掉周六周日实现代码

    js 取时间差去掉周六周日实现代码

    js 求时间差在生活中经常会触及到,本文整理了一些,希望可以帮助有需求的朋友可以,而起还可以实现去掉周六周日这些东东,废话不多说,进入正题
    2012-12-12
  • js怎么判断flash swf文件是否加载完毕

    js怎么判断flash swf文件是否加载完毕

    因为我一直不知道该怎么判断swf文件是否加载完毕,于是想用js来实现这个功能,需要的朋友可以参考下
    2014-08-08
  • Bootstrap的popover(弹出框)2秒后定时消失的实现代码

    Bootstrap的popover(弹出框)2秒后定时消失的实现代码

    Bootstrap Popover(弹出框)是使用定制的 Jquery 插件创建的。它可以用来显示任何元素的一些信息。这篇文章主要介绍了Bootstrap的popover(弹出框)2秒后定时消失功能,需要的朋友参考下
    2017-02-02
  • Javascript实现基本运算器

    Javascript实现基本运算器

    这篇文章主要为大家详细介绍了Javascript实现基本运算器的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 如何利用JavaScript 实现继承

    如何利用JavaScript 实现继承

    这篇文章主要介绍了如何利用JavaScript 实现继承,JavaScript 在编程语言界是个特殊种类,它和其他编程语言很不一样,JavaScript可以在运行的时候动态地改变某个变量的类型,下面小编将继续介绍JavaScript如何实现继承,需要的朋友可以参考下
    2022-02-02
  • javascript实现点击产生随机图形

    javascript实现点击产生随机图形

    这篇文章主要为大家详细介绍了javascript实现点击产生随机图形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 跟我学习javascript的定时器

    跟我学习javascript的定时器

    跟我学习javascript的定时器,告诉大家具体的使用方法,并向大家提出了一个消息要求,制作一个定时器,有没有朋友感兴趣,挑战一下
    2015-11-11

最新评论