漢諾塔問題是乙個經典的問題。
漢諾塔(hanoi tower),又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著n片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動乙個圓盤。問應該如何操作?
試想一下,如果我們要將最大的圓盤移動到最右邊的柱子上。我們需要把除此圓盤的其他圓盤先移動到中間的柱子上。因此這個問題就變成了如何將 n-1 個圓盤移動到中間的柱子上。很容易我們就想到了遞迴的方法。
將 n 個圓盤從左邊柱子移動到右邊柱子:
[遞迴的]將 n-1 個圓盤從左邊柱子移動到中間柱子。
將最大的圓盤從左邊柱子移動到右邊柱子。
[遞迴的]將 n-1 個圓盤從中間柱子移動到右邊柱子。
def
hanoi
(height, left=
'left'
, right=
'right'
, middle=
'middle'):
if height:
hanoi(height -
1, left, middle, right)
print
(left,
'=>'
, right)
hanoi(height -
1, middle, right, left)
hanoi(
3)
exit(⏰) 漢諾塔 遞迴
個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。include include include include include include include include include include include include include 標頭檔案引用的較多...
遞迴漢諾塔
遞迴問題 遞迴要有三個要素 1.遞迴結束條件 2.遞迴結束時的處理 3.抽取重複的邏輯,剝離外殼 重點都在這一步 漢諾塔問題 把圓盤從下面開始按大小順序重新擺放在另一根柱子上。且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。首先,要搞這個編碼得要知道漢諾塔的解題思路 1.把a塔上...
遞迴 漢諾塔
漢諾塔問題。這裡順便可以求出一共需要搬運的次數。以下是漢諾塔問題的解法 class hanoi from 搬運的起點,to 搬運的目標地,middle 臨時中轉地 private static int hanoi int level,char from,char to,char middle int...