1. 程式人生 > >Python函數遞歸之漢諾塔

Python函數遞歸之漢諾塔

info int code 大小 只需要 重新 個數 p s tar

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,

在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。

並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

技術分享圖片

漢諾塔的移動問題,漢諾塔的三個圓柱分別標註為A、B、C,圓盤開始是在A圓柱上面並上從下往上按照大小順序摞著圓盤,需要將其移動到

C圓柱,遞歸的思路是:

(1)A上的的圓盤個數n = 1,那麽很直接,直接移動到C即可,即是A --> C,n = 2時,也只需要3步即可;

(2)A上的的圓盤個數n >= 3,移動的思路是首先借助B,將(n-1)個圓盤移動到B,再將A上面的最後一個圓盤移動到C,

(3)B上面有(n-1)個圓盤,要移動到C,按照上一步的思路,必須再借助A來將實現

(4)當有1個盤子時,A(1) --> C

(5)當有n個盤子時,A(n-1)--> B, A(1)--> C, B(n-1) --> C,遞歸的思路,

1 def move(n, a, b, c):
2     if n == 1:
3         print(%s --> %s % (a, c)) # 只有1個盤子,A --> C
4     else:
5         move(n-1, a, c, b) # 有n個盤子,借助於C,A(n-1) --> B
6 move(1, a, b, c) # 有n個盤子,A(1) --> C 7 move(n-1, b, a, c) # 有n個盤子,借助於A,B(n-1) --> C

Python函數遞歸之漢諾塔