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自定义事件介绍
Aug 29 Javascript
JavaScript实现控制打开文件另存为对话框的方法
Apr 17 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 Javascript
vue实现密码显示隐藏切换功能
Feb 23 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
vue的三种图片引入方式代码实例
Nov 19 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
Oct 18 Javascript
详解javascript脚本何时会被执行
Feb 05 Javascript
Vue.Draggable实现交换位置
Apr 07 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
jquery遍历input取得input的name
2009/04/27 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
vue中实现回车键登录功能
2020/02/19 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
Python getopt模块处理命令行选项实例
2014/05/13 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
python3.6数独问题的解决
2019/01/21 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
历史系自荐信范文
2013/12/24 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
施工安全承诺书
2014/05/22 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
检讨书格式
2019/04/25 职场文书
python对文档中元素删除,替换操作
2022/04/02 Python