卡在这里整整一天,总结了一下送给后边学习的朋友作参考,希望可以为你节省些时间,有像我一样非要弄清楚代码具体运行步骤的可以看一看
Topic source我理解的大致的运行步骤和输出大家可以参考一下 move(3, 'A', 'B', 'C') move(2, a, c, b) move(1, a, b, c) a->c a->b move(1, c, a, b) c->b a->c move(2, b, a, c) move(1, b, c, a) b->a b->c move(1, a, b, c) a->c
恕我愚钝哈,还是没太看明白 执行 ‘行5’, 第一次递归开始,((n-1), a, c, b)回到函数最初代入(3, a='A', b='B', c='C'),得出参数为(2, 'A', 'C', 'B'),【!注意: 此时‘行1 ’(3, a='A', b='B', c='C')在 ‘行5’ 递归回到函数最初运行后已改变为(2, a='A', b='C', c='B')】 执行 ‘行2 - 3’ ,n != 1 , ‘行2 - 3’ 越过 执行else: 执行 ‘行5’,将((n-1), a, c, b)代入(2, a='A', b='C', c='B'),得出参数为(1, 'A', 'B', 'C') ,继续执行 ‘行2 - 3’,n == 1 返回输出:(a, "->", c)代入(1, 'A', 'B', 'C') ,即 A -> C *既然已经运行到n==1了,后面这个行5又是怎么开始的呢?* 回到 ’ 行5‘,继续执行 ‘行6’ ,将(a, "->", c)代入move函数(2, a='A', b='C', c='B')并输出,即A -> B
请问代码解析这里: 第四步 执行 ’行7‘ move((n-1), b, a, c): 执行 ‘ 行7’ ,第二次递归开始,((n-1), b, a, c)代入(3, a='A', b='B', c='C')
为什么n值又为3了呢?
说实话没有节省时间,想了一下午... 看了分析 突然感觉不懂 我觉得其中最重要的是return ! (return 跳出) move(3,abc) - move(2,acb) -move(1,abc) returnP(ac) Print(ab) move(1,cab) returnP(c,b) move(2,bac) move(1,bca) return P(ba) print(bc) move(1,abc) returnP(ac) over~
- 1
- 2
流逝的仲夏夜之梦
老哥讲的很详细,我对有些递归很费解