1. 程式人生 > >python數據結構_遞歸_漢諾塔問題

python數據結構_遞歸_漢諾塔問題

代碼 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數據結構_遞歸_漢諾塔問題