public class HanoiTower {
public static void moveDish(int level,char from,char inter,char to){
if(level==1){
System.out.println("从"+from+"移动盘子1号到"+to);
}else{
moveDish(level-1,from,to,inter);
System.out.println("从"+from+"移动盘子"+level+"号到"+to);
moveDish(level-1,inter,from,to);
}
}
public static void main(String[] args) {
int nDish=3;
moveDish(nDish,'a','b','c');
}
}
这个三层汉诺塔执行顺序怎么样的 先是nDish 不断执行moveDish(level-1,from,to,inter);到nDish=1然后执行if(level==1){
System.out.println("从"+from+"移动盘子1号到"+to); 但是这个时候level已经等于1了 怎么会去执行else里面的语句?
------解决思路----------------------
汗,你先学下递归吧,这东西仔细思考一下就很容易理解啊,但是递归本身很难讲清楚
我只能讲下大致的流程
public static void moveDish(int level, char from, char inter, char to) {
if (level == 1) {
System.out.println("从" + from + "移动盘子1号到" + to);
} else {
moveDish(level - 1, from, to, inter);
System.out.println("从" + from + "移动盘子" + level + "号到" + to);
moveDish(level - 1, inter, from, to);
}
}
首先通过main()调用第5行的moveDish(3),此时第7行的moveDish(3)还没执行,此方法被压栈
然后调用了第5行的moveDish(2),此时还没执行过的栈内的moveDish(3)和这次压栈的第7行的moveDish(2)
然后调用了第5行的moveDish(1),此时还没执行过的有上一次的moveDish(3),moveDish(2)和这次第7行的moveDish(1)
然后调用了第2行moveDish(1)输出了语句
接着依次出栈执行之前没执行过的第7行的moveDish(1),moveDish(2),moveDish(3)
不知道你能不能理解,去看一下stack结构应该能够理解的比较好
------解决思路----------------------
递归有时候确实容易迷,这个确实需要自己理解下,前面的人说的都是对的,我以初始level为2的情况大概给你画个图解释一下这个程序的执行过程,看你能不能理解,level=3、4……,只不过是递归层数多少的问题,每一层大概都是这种调用方法。