新手求指导,还在基础阶段求各位大神教教

wntssb 2014-10-15 10:32:53
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里面的语句?
...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wntssb 2014-10-15
  • 打赏
  • 举报
回复
引用 2 楼 csuoo 的回复:
进入DEBUG模式 在每个syso语句打断电 就能很方便的看出流程0.0 这个循环调用多次方法,每次都是先进行完方法再执行下面的语句
我知道用debug模式,在那里面我就是看不懂 先是nDish 不断执行moveDish(level-1,from,to,inter);到nDish=1然后执行if(level==1){ System.out.println("从"+from+"移动盘子1号到"+to); 但是这个时候level已经等于1了 怎么会去执行else里面的语句?
wntssb 2014-10-15
  • 打赏
  • 举报
回复
我知道用debug模式,在那里面我就是看不懂 先是nDish 不断执行moveDish(level-1,from,to,inter);到nDish=1然后执行if(level==1){ System.out.println("从"+from+"移动盘子1号到"+to); 但是这个时候level已经等于1了 怎么会去执行else里面的语句?
洗手洗红豆 2014-10-15
  • 打赏
  • 举报
回复
进入DEBUG模式 在每个syso语句打断电 就能很方便的看出流程0.0 这个循环调用多次方法,每次都是先进行完方法再执行下面的语句
wntssb 2014-10-15
  • 打赏
  • 举报
回复
自顶求指教 来人啊~~~~~~~~~~~~~
wntssb 2014-10-15
  • 打赏
  • 举报
回复
[quote=引用 6 楼 YYZhQ 的回复:] 同样十分感谢,请问能否加个聊天方式好方便请教?
wntssb 2014-10-15
  • 打赏
  • 举报
回复
[quote=引用 5 楼 sirius93 的回复:] 谢谢 虽然我自己已经懂了 但还是十分感谢你 你的解释切中要点,我那时候就是那点没懂
YYZhQ 2014-10-15
  • 打赏
  • 举报
回复
递归有时候确实容易迷,这个确实需要自己理解下,前面的人说的都是对的,我以初始level为2的情况大概给你画个图解释一下这个程序的执行过程,看你能不能理解,level=3、4……,只不过是递归层数多少的问题,每一层大概都是这种调用方法。
coffee-time 2014-10-15
  • 打赏
  • 举报
回复
汗,你先学下递归吧,这东西仔细思考一下就很容易理解啊,但是递归本身很难讲清楚 我只能讲下大致的流程

	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结构应该能够理解的比较好

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧