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 相关文章推荐
js 获取子节点函数 (兼容FF与IE)
Apr 18 Javascript
JS 树形递归实例代码
May 18 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
Jan 17 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Dec 14 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
canvas实现刮刮卡效果
Mar 14 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
Jul 16 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
微信小程序开发之改变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表单转换textarea换行符的方法
2010/09/10 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
详解Python 函数如何重载?
2019/04/23 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
《乌塔》教学反思
2014/02/17 职场文书
董事长助理岗位职责
2014/02/18 职场文书
工程专业应届生求职信
2014/02/19 职场文书
学校安全管理责任书
2014/07/23 职场文书
退伍军人感言
2015/08/01 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
导游词之包公祠
2019/11/25 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
你真的会用Mysql的explain吗
2022/03/31 MySQL
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python