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 相关文章推荐
jQuery中element选择器用法实例
Dec 29 Javascript
PassWord输入框代码分享
Jun 07 Javascript
Angular 页面跳转时传参问题
Aug 01 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
vue生成随机验证码的示例代码
Sep 29 Javascript
使用Vue组件实现一个简单弹窗效果
Apr 23 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
详解关于React-Router4.0跳转不置顶解决方案
May 10 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
react antd实现动态增减表单
Jun 03 Javascript
js 实现验证码输入框示例详解
Sep 23 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(6) 面向对象
2010/02/16 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
在python中创建指定大小的多维数组方式
2019/11/28 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
为什么要做架构设计
2015/07/08 面试题
毕业生多媒体设计求职信
2013/10/12 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
新郎答谢词
2015/01/04 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
python爬虫之爬取笔趣阁小说
2021/04/22 Python
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python