马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
见https://www.jianshu.com/p/1c4d7ffc8b21,但从第三步开始没看懂:第二步完不就结束了吗?为何还有后续?而且为何又执行 ‘行6’ print(a, "->", c)?请大神不吝指点,谢谢!
开始运行move( 3 ):
move 函数代入( n = 3 )参数: (3, a='A', b='B', c='C')
第一步 执行 ‘行2 - 3’ if n == 1:......:
n != 1, ‘行2 - 3’ 越过
第二步 执行 ‘行4’else::
执行 ‘行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
回到 ’ 行5‘,继续执行 ‘行6’ ,将(a, "->", c)代入move函数(2, a='A', b='C', c='B')并输出,即 A -> B
执行 ’行7‘,将( (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):
执行 ‘ 行7’ ,第二次递归开始,((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')】
执行 ‘行2 - 3’ ,n != 1, ‘行2 - 3’ 越过
执行`else:
执行 ‘行5’,将((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
回到 ’ 行5‘,继续执行 ‘行6’ ,将(a, "->", c)代入move函数(2, a='B', b='A', c='C')并输出,即 B -> C
执行 ’行7‘,将((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
代码运行结束。 |