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 相关文章推荐
Javascript & DHTML 实例编程(教程)DOM基础和基本API
Jun 02 Javascript
Javascript 个人笔记(没有整理,很乱)
Jul 07 Javascript
javascript 数组学习资料收集
Apr 11 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
jQuery实现标题有打字效果的焦点图代码
Nov 16 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 Javascript
vue 中filter的多种用法
Apr 26 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
Dec 01 Javascript
详解Vue3中对VDOM的改进
Apr 23 Javascript
js数组中去除重复值的几种方法
Aug 03 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+Html+缓存
2006/12/20 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
js压缩利器
2007/02/20 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
采用call方式实现js继承
2014/05/20 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
用原生js做单页应用
2017/01/17 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Python获取当前时间的方法
2014/01/14 Python
python多进程并行代码实例
2019/09/30 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
Python读写Excel表格的方法
2021/03/02 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
洗煤厂厂长岗位职责
2014/01/03 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
综合实践活动总结
2014/05/05 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL