汉诺塔是递归算法里的一个经典案例,有三根柱子A,B,C,A柱子上有N个盘子,从小到大依次叠放,要求把A上的盘子都移到C上,B可以作为临时存放,移动的时候必须始终遵循小盘子在大盘子上面,且每次只能移动一个盘子,求其算法。用java实现如下:
public class Hanoi{
public static void main(String[] args){
moveAll(4,'A','B','C');
}
//参数 n表示移动n个盘子,from 表示本来放盘子的,temp是临时存放盘子的,to是最终目的
public static void moveAll(int n,char from,char temp,char to){
if(n==1){
move(n,from,to);
}else{
moveAll(n-1,from,to ,temp);//要移动n个盘子首先要将n-1个盘子借助to,移到temp上,然后才能将最大的那个盘子放到to上
move(n,from,to);//将最大的第n个盘子从from 移到to上
moveAll(n-1,temp,from,to);//最后再将n-1个盘子由temp,借助from,移动到to上
}
}
//移动第n个盘子
public static void move(int n,char from,char to){
System.out.println("move "+n +" from " + from +" to "+ to);
}
}
下面的链接是个flash
http://www.sznews.com/jbjob/content/2007-09/17/content_1514108.htm
分享到:
相关推荐
汉诺塔递归算法: 问题抽象 3个塔,n个碟子 初始:所有碟子放在1号塔,大的在底下,小的在上面 任务:把碟子移动到2号塔,顺序不变, 可用3号塔辅助 限制 每次只能移动一个碟子 总是大碟子...
用C++实现汉诺塔的递归算法,定义了类和方法。
汉诺塔的算法,递归算法有详细的c语言程序设计结构,内含递归算法
用C语言实现汉诺塔的递归算法,另外还有用栈来实现的方式:http://download.csdn.net/detail/jason19905/6419427
汉诺塔问题 动态效果 递归算法 vc可用 完美运行
有三根柱子A,B,C,A柱子上有N个盘子,从小到大依次叠放,要求把A上的盘子都移到C上,B可以作为临时存放,移动的时候必须始终遵循小盘子在大盘子上面,且每次只能移动一个盘子。
本人原创,思路想法里面都有。是根绝一些规律写的非递归,不是用递归改的。
汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。
这是我用c语言写的程序,我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。
汉诺塔递归与非递归结果对比,结果是no differences,说明非递归算法没错。递归算法参考了csdn另一名博主的博客。
学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅. ...
汉诺塔非递归算法 用栈作为辅助存储结构 和数据结构中中序遍历二叉树的方法类似
非递归汉诺塔算法,并带有一片武汉大学的算法描述。
//程序实现了mystack栈的声明和定义,并且通过函数 //move_stacks的递归调用和函数move_a_ring实现汉 //诺塔的算法,并用函数print_stacks和pr_chars实现汉诺 //塔的动画效果
用栈来实现汉诺塔,要明白递归就是栈的重要应用之一,递归是系统自动调用栈来处理。
本文实例讲述了C++基于递归算法解决汉诺塔问题与树的遍历功能。分享给大家供大家参考,具体如下: 递归是把问题转化为规模缩小的同类问题,然后迭代调用函数(或过程)求得问题的解。递归函数就是直接或间接调用自身...
适应于大学生学习算法
php代码-PHP函数实战-汉诺塔递归算法
利用C++编写汉诺塔的非递归算法以及其运行程序(算法中包含注释)。