java 板


LINE

各位前辈好,这是我在ppt第一次发文,因在河内塔题目有所误解, 只好硬着头皮请教各位前辈... 可悲的是我已经google过一些文章後答案竟然也看不懂, 恳请大大们赐教: import java.io.*; public class Hanoi { public static void main(String args[]) throws IOException { int n; BufferedReader buf; buf = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入盘数:"); n = Integer.parseInt(buf.readLine()); Hanoi hanoi = new Hanoi(); hanoi.move(n, 'A', 'B', 'C'); } public void move(int n, char a, char b, char c) { if(n == 1) System.out.println("盘" + n + "由" + a + "移至" + c); else { move(n - 1, a, c, b); System.out.println("盘" + n + "由" + a + "移至" + c); move(n - 1, b, a, c); } } 当输入n=2时会跑出: (1)盘 1 由 A 移至 B (2)盘 2 由 A 移至 C (3)盘 1 由 B 移至 C 对於以上程式码我的理解是 当n=2 即从else开始 move(2-1,a,c,b) 又等於 (1,a,c,b) 所以此时会印出盘1由A移至B 我的疑问在(2)不理解,为什麽此时不是跑回n=1 if条件句且应该要印出盘1由A移至C呢? 这是我在网路上找到的解答: n=2 Step1: move(n - 1, a, c, b); 等於是 move(1, a, c(相当於b), b(相当於c)); System.out.println("盘 " + n + " 由 " + a + " 移至 " + c); 等於 System.out.println("盘 1 由 a 移至 b); Step2: System.out.println("盘 " + n + "由 " + a + " 移至 " + c) 等於 System.out.println("盘 2 由 a 移至 c) Step3: move(n - 1, b, a, c); 等於是 move(1, b(相当於a), a(相当於b), c); System.out.println("盘 " + n + " 由 " + a + " 移至 " + c); 等於 System.out.println("盘 1 由 b 移至 c); 1.究竟Step2是怎麽生成的?(我有尝试使用eclipse中的debug但失败了可能是方法有错) 谢谢大家的耐心回应,很不好意思但透过大家的帮忙我已经理解了! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.240.146.213
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1476449346.A.BC1.html
1F:→ nodoors: step2是else里第二行@@ 10/14 21:32
2F:→ pttworld: debug在move method下行断点,watch到n=2後单步执行。 10/14 21:39
谢谢大大,我已经学会如何debug了! 但若n=3时,执行到else後此时值为move(2,a,c,b),接着并非往下执行第二行System.out.print(), 後程式跳回if(n==1),再跳回move(n - 1, a, c, b)此时n=1,a=A,b=B,c=C 这是为什麽呢? ※ 编辑: ciakkk040156 (123.240.146.213), 10/14/2016 23:43:28
3F:推 maxsho: 先把if else叙述在做什麽先弄清楚 10/14 23:36
4F:推 maxsho: 当n不是1时,会执行else内的全部叙述 执行move(n-1,a,c,b) 10/14 23:40
5F:推 maxsho: 在执行else中的第二行 System.out.println最後执行 10/14 23:45
6F:→ maxsho: move(n-1,b,c,a) 10/14 23:46
※ 编辑: ciakkk040156 (123.240.146.213), 10/14/2016 23:48:46
7F:推 maxsho: 执行move(2,a,c,b)时因爲n!=1会在先执行一次else的所有叙 10/14 23:53
8F:→ maxsho: 所以才叫递回 10/14 23:53
9F:推 maxsho: 我觉得你先把程式是如何呼叫及执行先搞清楚在来提问比较好 10/14 23:55
m大谢谢你的回覆/解答,自己的确是不太清楚程式的呼叫与执行, 导致问问题也不够精确,我会加油
10F:推 ilms49898723: 同楼上,我不懂你是不懂他递回的逻辑,还是你只是单 10/14 23:58
11F:→ ilms49898723: 纯看不懂code 10/14 23:58
谢谢回覆,下次提问我会整理好思绪再提问
12F:→ ssccg: 如果你不懂method call stack的话,用debug一行一行跑反而 10/15 01:57
13F:→ ssccg: 会混乱以为都在哪几行跳吧 10/15 01:57
14F:→ ssccg: 先试着自己把执行顺序写出来,把method inline展开来看 10/15 01:57
15F:→ ssccg: 递回可能不是很重要,但是一个method call是怎麽回事很重要 10/15 02:00
谢s大回覆,看debug然後专心逐行写出写执行顺序出来让我想通了。 我的问题在於误解值传递的方式以及程式执行的步骤,茅塞顿开的感觉真好!
16F:→ pttworld: step into进入,step out跳出,step over跃往下一步。 10/15 02:47
17F:→ pttworld: 这三个基本的反覆单步执行理解递回原理。 10/15 02:48
感谢p大再度回应,透过你的解释我有尝试用此方法跑简单的递回去理解
18F:推 gmoz: 1进入 2进入 3进入 满足中断 3跑完返回 2跑完返回 1跑完返回 10/15 10:25
19F:→ gmoz: 先拿简单的例子弄清楚递回的运作方式 10/15 10:25
谢谢回应,我会去试试看!
20F:→ adrianshum: 很久以前我在c_cpp 版有回答过河内塔的问题,看看能 10/15 16:55
21F:→ adrianshum: 不能理解? 10/15 16:55
谢谢a大,我有去拜读文章,很清楚的说明! ※ 编辑: ciakkk040156 (123.240.146.213), 10/15/2016 21:20:38







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP