漢諾塔遞迴

2021-09-24 14:27:28 字數 687 閱讀 7233

a=操作區;b=緩衝區;c=目標區 這樣程式可以改為 : move(n,操作區,緩衝區,目標區)

我們的目的:將 操作區 的數移動到 目標區 裡,所以函式執行只有一句話:操作區--->目標區

第一步:

將 操作區a 前n-1個數移動到 緩衝區b 裡,這時 緩衝區b 就是我們這一步的目標區;

所以是move(n-1,a,c,b)

第二步:

將 操作區a 的最後乙個數移動到 目標區c 裡,即move(1, a, b, c)

注意: 這時,操作區a的東西已經全部移動到緩衝區b和目標區c裡了,操作區a已經為空了。 所以現在,緩衝區b就成為了新的操作區(裡頭有m=n-1個數),而之前的操作區a成為了新的緩衝區

所以第三步是將a、b交換後再一次執行move函式,即 move(m,b,a,c),並且此時m=n-1。

def move(n, a, b, c):

if n == 1:

print(a, '-->', c)#n=1由a移動到c

else:

move(n-1,a,c,b)#由a移動到b

move(1,a,b,c)#執行a裡面剩下的乙個數移動到c

move(n-1,b,a,c)#由b移動到c

漢諾塔 遞迴

個人理解遞迴函式的基本要求就是,函式中呼叫函式本身,滿足特定的條件後返回。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...