汉诺塔是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
package cn.zhf.test;
public class HanoiTower {
public static int nDisks = 2;
public static void moveDisks(int topN,char from,char inter,char to){
if(topN == 1)
System.out.println("Disk 1 from " + from + " to " +to);
else{
moveDisks(topN-1,from,to,inter);//from >> inter
System.out.println("Disk " + topN + " from " + from + " to " + inter);
moveDisks(topN-1,inter,from,to);//inter >> to
}
}
public static void main(String[] args) {
moveDisks(nDisks,'A','B','C');
}
}
递归这种做法,总感觉看不到问题是如何被真正解决的,现在觉得非递归才是真正的难题。
分享到:
相关推荐
汉诺塔的非递归实现,c++实现的,很简单,只有50多行,从递归的汉诺塔改编而来,将原来递归时的参数状态保存在栈中,入栈代替递归,出栈代替递归返回。
汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。
用非递归算法,用栈解决问题,C#语言,来解决汉诺塔移动问题
用C++实现汉诺塔的递归算法,定义了类和方法。
适应于大学生学习算法
汉诺塔的非递归实现,估计课后作业应该有的O(∩_∩)O~
c++递归实现汉诺塔问题。 算法分析与设计 例题的源码实现。跟书上的一样。
C# 实现汉诺塔问题 递归+Recursion 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
汉诺塔-汉诺塔的非递归实现源码和原理讲解---从网上整理的
用C语言实现汉诺塔的递归算法,另外还有用栈来实现的方式:http://download.csdn.net/detail/jason19905/6419427
汉诺塔非递归算法 用栈作为辅助存储结构 和数据结构中中序遍历二叉树的方法类似
用栈来实现汉诺塔,要明白递归就是栈的重要应用之一,递归是系统自动调用栈来处理。
一个用递归实现的汉诺塔代码,简单明了,易于理解
汉诺塔问题非递归算法的实现
C#汉诺塔(递归调用)
本人原创,思路想法里面都有。是根绝一些规律写的非递归,不是用递归改的。
非递归汉诺塔算法,并带有一片武汉大学的算法描述。
汉诺塔问题 C语言实现 递归调用
规则一:每次只能移动一个盘子 规则二:盘子可以插在X、Y、Z中的 任一塔上 规则三:大盘子不能压在小盘子上 汉诺塔经典问题递归实现 vc++6.0编译通过