JavaScript算法实现之汉诺塔(Hanoi)

目前前端新手,看到的不喜勿喷,还望大神指教。

随着Node.js,Angular.js,JQuery的流行,点燃了我学习JavaScript的热情!以后打算每天早上跟晚上抽2小时左右时间将经典的算法都用JS来实现,加快学习JS的步伐(用这个办法方便跟自己以前学过的C++语言作对比,找出不同),希望自己能够坚持下去!!!

首先来个汉诺塔的。

<script>
      function hanoi(n,a,b,c){
          if(n==1){
              document.write("Move "+n+" from "+a+" to "+c+"</br>");
          }
          else{
              hanoi(n-1,a,c,b);
              document.write("Move "+n+" from "+a+" to "+c+"</br>")
              hanoi(n-1,b,a,c);
          }
      }
      hanoi(3,"A","B","C");
</script>

菜鸟说明:

采用递归(递归就是有限的重用一个的函数,此函数变量可改变,有条件判断让函数能过自行结束)的办法实现,将上面代码直接贴到html页面,打开Html产生下图所示证明你成功了。

与C语言的区别(不敢分优缺点):

1.不需要调用外部文件,只要是支持JS的浏览器就能解析。

2.变量不需要申明,但要明确是整型还是字符串(字符的话要加双引号!)。

3.JS是逐句解析,不需要主函数,创建一个对象之后可以直接在后面调用使用。

4.

普及常识:
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

时间: 2024-10-28 21:00:55

JavaScript算法实现之汉诺塔(Hanoi)的相关文章

算法学习(4)----汉诺塔递归算法和非递归算法

学习<算法设计与分析基础>,习题2.4 第5题要求为汉诺塔游戏设计一个非递归的算法. 思,不得其解.看书后答案提示: 你如果做不到,也不要沮丧:这个问题的非递归算法虽然不复杂,但却不容易发现.作为一种安慰,可以在因特网上寻找答案. 好吧,话都说得这么直接了,遂百度之,得到一个感觉很好的答案,略做修改,摘录于下: 原文地址:http://blog.sina.com.cn/s/blog_48e3f9cd01000474.html ##################################

Algorithm系列之汉诺塔(Hanoi)

作者:i_dovelemon 来源:CSDN 日期:2014 / 11 4 主题: 递归, Hanoi 引言 在算法的世界里,有递归这样一个强大的工具.很多的算法,我们都可以使用递归来实现,并且非常的简单,容易理解.今天,我们就来讲解一个使用递归解决的问题.著名的汉诺塔问题,就能够使用递归算法来解决.我们先来了解汉诺塔问题是什么: 汉诺塔问题最早由一个法国数学家卢卡斯在1890年发表的,当时的版本是这样的,当64个圆盘被从梵塔上移走的时候,世界末日也就来临了.如果祭司每一分钟移动一个圆盘,请估计

汉诺塔-Hanoi

1. 问题来源: 汉诺塔(河内塔)问题是印度的一个古老的传说. 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔.

算法笔记_013:汉诺塔问题(Java递归法和非递归法)

目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus is possible for using animation. e.g. if n = 2 ; A→B ; A→C ; B→C; if n = 3; A→C ; A→B ; C→B ; A→C ; B→A ; B→C ; A→C; 翻译:模拟汉诺塔问题的移动规则:获得奖励的移动方法还是有可能的.

C语言之算法初步(汉诺塔--递归算法)

个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考.记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果.现在想起来汉诺塔的算法就3个步骤:第一,把a上的n-1个盘通过c移动到b.第二,把a上的最下面的盘移到c.第三,因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了.所以算法看起来就简单多了.不过,思考过程还是很痛苦的,难以理解.递归中会保存数据的好处在这里又得到体现,太神奇了. 汉诺塔代码如下:

汉诺塔 Hanoi Tower

一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上穿好了由大到小的64片金片,这就是所谓的汉诺塔(Hanoi Tower).不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面. 僧侣们预言,当所有的金片从梵天穿好的金片上移到另一根针上时,世界末日就会来临,而梵塔.寺庙和众生也会随之灭亡...... 故事不多说了,汉诺塔是递归思想的典型应用,上代码: 1 #i

汉诺塔hanoi

问题描述: 有一个梵塔,塔内有三个座A.B.C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图). 把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘 子始终保持大盘在下,小盘在上. 描述简化:把A柱上的n个盘子移动到C柱,其中可以借用B柱. #include <bits/stdc++.h> using namespace std; void move(int n, char f, char t) { static int cnt

zs深入浅出学算法022——DFS———汉诺塔问题II

Description 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. Input 输入圆盘数n( 1 <= n <= 10) Output 按照示例输出搬盘子的过程,每次搬动输出一行 Sample Input 2 Sample Output a->b

【数据结构与算法】递归汉诺塔

汉诺塔 汉诺塔是根据一个传说形成的数学问题(关于汉诺塔): 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则. 递归汉诺塔 解题思路: 可以把问题简化成2个盘子的情况,如:A上有两个盘子,B和C是空的.如果要把A的两个盘子全部移动到C,需要经过以下步骤: 1.A移动一个盘子到B 2.A移动一个盘