卡在这里整整一天,总结了一下送给后边学习的朋友作参考,希望可以为你节省些时间,有像我一样非要弄清楚代码具体运行步骤的可以看一看
Topic source请教一个问题:【!注意: 此时‘行1 ’(3, a='A', b='B', c='C')在 ‘行5’ 递归回到函数最初运行后已改变为(2, a='A', b='C', c='B')】 这个部分的值为什么存的是n=2的情况,在初次打印后的值不是变成(1,A,B,C)了吗?
- 1
- 2
请教一个问题:【!注意: 此时‘行1 ’(3, a='A', b='B', c='C')在 ‘行5’ 递归回到函数最初运行后已改变为(2, a='A', b='C', c='B')】 这个部分的值为什么存的是n=2的情况,在初次打印后的值不是变成(1,A,B,C)了吗?
宋忠义_
print(a, "->", c)
可以写做move(1, a, b, c)
,但是个人觉得分十分没有必要,既然都是一样的效用还是让代码少跑两步的好。开始运行
move( 3 )
:(3, a='A', b='B', c='C')
第一步 执行 ‘行2 - 3’
if n == 1:......
:n != 1
, ‘行2 - 3’ 越过第二步 执行 ‘行4’
else:
:((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')
】n != 1
, ‘行2 - 3’ 越过else:
((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
(a, "->", c)
代入move函数(2, a='A', b='C', c='B')
并输出,即A -> B
( (n-1), b, a, c)
代入(2, a='A', b='C', c='B')
得出参数为(1, 'C', 'A', 'B')
,继续执行 ‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'C', 'A', 'B')
,即C -> B
第三步 执行 ‘行6’
print(a, "->", c)
:(a, "->", c)
代入move函数(3, a='A', b='B', c='C')
并输出,即*A -> C
第四步 执行 ’行7‘
move((n-1), b, a, c)
:((n-1), b, a, c)
代入(3, a='A', b='B', c='C')
得出参数为(2, 'B', 'A', 'C')
【!注意: 此时 ‘行1 ’(3, a='A', b='B', c='C')
在 ‘行7’ 递归回到函数最初运行后已改变为(2, a='B', b='A', c='C')
】n != 1
, ‘行2 - 3’ 越过else:
((n-1), a, c, b)
代入(2, a='B', b='A', c='C')
得出参数为(1, 'B', 'C', 'A')
,继续执行‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'B', 'C', 'A')
,即B -> A
(a, "->", c)
代入move函数(2, a='B', b='A', c='C')
并输出,即B -> C
((n-1), b, a, c)
代入(2, a='B', b='A', c='C')
得出参数为(1, 'A', 'B', 'C')
,继续执行 ‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'A', 'B', 'C')
,即A -> C
代码运行结束,输出结果为: