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


Posted in Javascript onJuly 05, 2018

“汉诺塔”是一个著名的益智游戏。塔上有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递归函数解“汉诺塔”算法代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
Dec 13 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
Mar 05 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
微信小程序实现星级评价
Nov 20 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 #Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 #Javascript
微信小程序实现左右联动的实战记录
Jul 05 #Javascript
vue实现自定义多选与单选的答题功能
Jul 05 #Javascript
JavaScript实现图片懒加载的方法分析
Jul 05 #Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
Jul 05 #Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 #Javascript
You might like
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php邮件发送,php发送邮件的类
2011/03/24 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP加密解密类实例代码
2016/07/20 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
Vue 实现树形视图数据功能
2018/05/07 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python实现下载文件的三种方法
2017/02/09 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
python读取和保存视频文件
2018/04/16 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
对python 命令的-u参数详解
2018/12/03 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
活动总结模板
2014/05/09 职场文书
数控机床专业自荐信
2014/05/19 职场文书
北京英文导游词
2015/02/12 职场文书
常住证明范本
2015/06/23 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
Python绘制分类图的方法
2021/04/20 Python
python开发的自动化运维工具ansible详解
2021/08/07 Python
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript