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 流畅动画实现原理
Sep 08 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 Javascript
jquery搜索框效果实现方法
Jan 16 Javascript
javaScript基础语法介绍
Feb 28 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
vue如何获取点击事件源的方法
Aug 10 Javascript
详解Node全局变量global模块
Sep 28 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
Nov 09 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
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
PHP实现计算器小功能
2020/08/28 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
js回调函数仿360开机
2019/12/26 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python optparse模块使用实例
2015/04/09 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
陈欧的广告词
2014/03/18 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
工程项目合作意向书
2015/05/08 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL