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 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
jquery 跨域访问问题解决方法(笔记)
Jun 08 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
js输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
JQuery异步获取返回值中文乱码的解决方法
Jan 29 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
微信小程序开发之改变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实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
Vue计算属性的使用
2017/08/04 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
详解Python中find()方法的使用
2015/05/18 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
python-地图可视化组件folium的操作
2020/12/14 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
武汉东之林科技有限公司机试
2013/09/17 面试题
幼儿教师寄语集锦
2014/04/03 职场文书
学生会部长竞选稿
2015/11/19 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
python xlwt模块的使用解析
2021/04/13 Python
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android