參考代碼的含義
參考代碼中
“move(n-1, a, c, b)
? ? print a, '-->', c
? ? move(n-1, b, a, c)”
這一段的含義我不明白,有下面幾個問題
1,print a, '-->', c中的 “a”與“c” 在“move(n-1, a, c, b)”這行代碼中分別是后者的‘a’與‘b’嗎?
2,第一行的n-1與第三行的n-1是不是同一個數字?
3,這兩個move是如何實現循環運算的?
參考代碼中
“move(n-1, a, c, b)
? ? print a, '-->', c
? ? move(n-1, b, a, c)”
這一段的含義我不明白,有下面幾個問題
1,print a, '-->', c中的 “a”與“c” 在“move(n-1, a, c, b)”這行代碼中分別是后者的‘a’與‘b’嗎?
2,第一行的n-1與第三行的n-1是不是同一個數字?
3,這兩個move是如何實現循環運算的?
2018-07-03
舉報
2018-07-03
這個問題之前也是困擾了我很久,仔細琢磨一下,還是可以理解的,這個例子對于理解遞歸函數是很不錯的。
首先,假設,這個函數只解決了一個問題,就是只有一個盤子的情況下,A——>C。
遞歸函數就是要不斷的調用函數自身,以達到將問題化整為零,最小段進行解決。也就是,就算有N個盤子,也要進行自身調用,將N個盤子的情況,至變成N個1個盤子的情況下,進行解決。
在整個變化中,唯一始終不變的就是n==1的情況A——>C,既然如此,對于變化就要在else中對需要變換的位置進行調換。例如?
然而 N=1的情況下結果就是
由此看出,最后運行的結果就是 A——>B,如此就符合了第一個出現的N-1的情況,以此類推。