python數據結構_遞歸_漢諾塔問題
阿新 • • 發佈:2018-09-18
代碼 nbsp 需要 數學歸納法 else 過去 所有 我們 但是
已經不是第一次寫這個漢諾塔問題, 其實遞歸還真是不太好理解, 因為遞歸這種是想其實有點反人類, 為什麽?
因為不太清楚, 寫個循環一目了然, 用遞歸其實要把核心邏輯理清楚, 要不根本沒法進行下去
所有才有了俗語:人用循環, 神用遞歸.
看來我也是普通人啊, 這個漢諾塔問題是遞歸必將的案例, 但是沒有一個講的很清楚的, 大部分都是把原理說了一遍, 還是需要自己來思考
反正我寫了半天, 也沒有自己搞出來, 大家不要笑我, 我是學工商管理的,
遞歸 說白了了就是數學歸納法, lz數學還是不錯的, 所有我認為可以解決掉這個難題:
1. 分析了:說起來思想很簡單, 當然代碼也是相當簡單,其實就是
1個盤子的時候, A->C
我們把上面n-1個盤子看成一個整體來操作.
我們要想移動最下面的盤子, 需要把上面n-1個盤子移到B盤子上去
這一步move(n-1, a, c, b)
然後移過去了, 我們需要打印一下print(A->C)
剩下n-1個盤子在哪? 對在 B盤子上, 同理操作是將這n-1個盤子移動到C上, 就ok啦
move(n-1, b, a, c)
就OK了
def move(n, a, b, c):
if n== 1:
print(a, "->", c)
else:
move(n-1, a, c, b)
print(a, "->", c)
move(n-1, b,a, c)
python數據結構_遞歸_漢諾塔問題