看不懂以下代碼是如何運作的,求直觀、明了、清晰的解釋。
def move(n, a, b, c):
? ? if n == 1:
? ? ? ? print a , '-->' , c
? ? ? ? return?
? ? move(n - 1 , a , c , b)
? ? print a , '-->' , c
? ? move(n - 1 , b , a , c)
move(4, 'A', 'B', 'C')
def move(n, a, b, c):
? ? if n == 1:
? ? ? ? print a , '-->' , c
? ? ? ? return?
? ? move(n - 1 , a , c , b)
? ? print a , '-->' , c
? ? move(n - 1 , b , a , c)
move(4, 'A', 'B', 'C')
2020-03-04
舉報
2020-03-04
先理解兩種情況,一是只有一個積木,二是有兩個積木。
一個積木時,print a,'-->',c 這個比較好理解,直接把a上的積木移到c上。
這時,前四行的代碼可以理解了,剩下三行的代碼,可以理解為兩塊積木的情況。
兩塊積木時,先把a移到b,再把a移到c,最后把b移到c。一定要先理解規則。
此時,根據n==1時的定義,move(n, a, b, c)中,a移到c,也就是第二個元素移動到第四個元素。
所以a移動到b,表達為move(n - 1 , a , c , b),
然后,a移動到c,表達為move(1 , a , b, c),也就是print a , '-->' , c,
最后,b移動到c,表達為move(n - 1 , b , a , c)
大于兩塊積木的,把除了最底下的積木,認為是完整的第二塊積木就可以了,這就是遞歸函數。
2020-04-02
個人理解:
move(n, a, b, c)首先要理解這個函數的定義
例如有A,B,C 三個柱子,n表示A柱子上的木塊
這個move函數就是把A柱子上的n個木塊移動到C柱子上
把前面n-1個木塊看成整體,那么
第一:A柱上面的n-1個木塊移動到B柱
第二:A柱上面最后一個木塊移動到C柱
第三:B柱上面的n-1個木塊移動到C柱
換成函數表達就是
move(n-1,a,c,b)
print a,'-->',c
move(n-1,b,a,c)
遞歸就這樣完成