不明白???求解
def?move(n,?a,?b,?c): ????if?n==1: ????????print?a,'-->',c ????????return ????move(n-1,a,c,b) ????move(1,a,b,c) ????move(n-1,b,a,c) ???? ???????? move(4,?'A',?'B',?'C')
結果:
A --> B
A --> C
B --> C
A --> B
C --> A
C --> B
A --> B
A --> C
B --> C
B --> A
C --> A
B --> C
A --> B
A --> C
B --> C
這個里面的C-->A?? C --> B? 是怎么實現出來的?
2016-10-31
n=4,計算機的計算流程如下
move(3, a, c, b)#這時終點是b,起點為a,相當于將盤子從a移動到b
?? ?move(2, a, b, c)#這時終點是c,起點為a,相當于將盤子從a移動到c
?? ??? ?move(1, a, c, b)?? ?print a -> b
?? ??? ?move(1, a, b, c)?? ?print a -> c
?? ??? ?move(1, b, a, c)?? ?print b -> c
?? ?move(1, a, c, b)?? ??? ?print a -> b
?? ?move(2, c, a, b)#這時終點是b,起點為c,相當于將盤子從c移動到b
?? ??? ?move(1, c, b, a)?? ?print c -> a
?? ??? ?move(1, c, a, b)?? ?print c -> b
?? ??? ?move(1, a, c, b)?? ?print a -> b
move(1, a, b, c)?? ??? ??? ?print a -> c
move(3, b, a, c)#這時終點是c,起點為b,相當于將盤子從b移動到c
?? ?move(2, b, c, a)#這時終點是a,起點為b,相當于將盤子從b移動到a
?? ??? ?move(1, b, a, c)?? ?print b -> c
?? ??? ?move(1, b, c, a)?? ?print b -> a
?? ??? ?move(1, c, b, a)?? ?print c -> a
?? ?move(1, b, a, c)?? ??? ?print b -> c
?? ?move(2, a, b, c)#這時終點是c,起點為a,相當于將盤子從a移動到c
?? ??? ?move(1, a, c, b)?? ?print a -> b
?? ??? ?move(1, a, b, c)?? ?print a -> c
?? ??? ?move(1, b, a, c)?? ?print b -> c
2016-10-27
這篇文字,或許對你理解有幫助:http://www.45fan.com/a/question/56773.html
關鍵是理解遞歸的思路,直接閱讀代碼,的確是難以理解。