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 相关文章推荐
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
jquery 学习笔记一
Apr 07 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
javascript表单事件处理方法详解
May 15 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
用js写的一个路由(简单实例)
Sep 24 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
浅谈Javascript常用正则表达式应用
Mar 08 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 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之数组学习
2011/05/29 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
php使用websocket示例详解
2014/03/12 PHP
php的curl封装类用法实例
2014/11/07 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
几种tab切换详解
2017/02/03 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
新娘父亲婚礼致辞
2014/01/16 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
雷峰塔导游词
2015/02/09 职场文书
防卫过当辩护词
2015/05/21 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang