課時24 遞迴 漢諾塔

2022-08-04 11:15:13 字數 1722 閱讀 1263

目錄:

一、漢諾塔

二、課時24課後習題及答案

一、漢諾塔

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

對於遊戲的玩法,我們可以簡單分解為三個步驟

(1)將前63個盤子從x移動到y上。

(2)將最底下的第64個盤子從x移動到z上。

(3)將y上的63個盤子移動到z上。

仔細想下,在遊戲中,我們發現每次都只能移動乙個圓盤,所以在移動的過程中顯然要借助另外一根針才可以實施。也就是說,步驟(1)將1~63個盤子需要借助z移到y上,步驟(3)將y針上的63個盤子需要借助x移到z針上。

所以把新思路聚集為以下兩個問題:

問題一:將x上的63個盤子借助z移到y上;

問題二:將y上的63個盤子借助x移到z上。

可以拆分為3個步驟來實現:

問題一(「將x上的63個盤子借助z移到y上」)拆解為:

(1)將前62個盤子從x移動到z上。

(2)將最底下的第63個盤子移動到y上。

(3)將z上的62個盤子移動到y上。

問題二(「將y上的63個盤子借助x移到z上」)拆解為:

(1)將前62個盤子從y移動到x上。

(2)將最底下的第63個盤子移動到z上。

(3)將x上的62個盤子移動到y上。

def

hanoi(n, x, y, z):

if n == 1:

print(x, '

-->

', z)

else

: hanoi(n-1, x, z, y) #

將前n-1個盤子從x移動到y上

print(x, '

-->

', z) #

將最底下的最後乙個盤子從x移動到z上

hanoi(n-1, y, x, z) #

將y上的n-1個盤子移動到z上

n = int(input('

請輸入漢諾塔的層數:'))

hanoi(n, 'x

', '

y', '

z')

看!這就是遞迴的魔力。

二、課時24課後習題及答案

漢諾塔 遞迴

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