python3 遞迴解漢諾塔問題

2021-10-10 18:11:38 字數 951 閱讀 2115

在經典漢諾塔問題中,有 3 根柱子及 n 個不同大小的穿孔圓盤,盤子可以滑入任意一根柱子。一開始,所有盤子自上而下按公升序依次套在第一根柱子上(即每乙個盤子只能放在更大的盤子上面)。移動圓盤時受到以下限制:

(1) 每次只能移動乙個盤子;

(2) 盤子只能從柱子頂端滑出移到下一根柱子;

(3) 盤子只能疊在比它大的盤子上。

請編寫程式,用棧將所有盤子從第一根柱子移到最後一根柱子。

你需要原地修改棧。

n = 1 時,直接把盤子從 a 移到 c;

n > 1 時,

先把上面 n - 1 個盤子從 a 移到 b(子問題,遞迴);

再將最大的盤子從 a 移到 c;

再將 b 上 n - 1 個盤子從 b 移到 c(子問題,遞迴)。

class solution:

def hanota(self, a: list[int], b: list[int], c: list[int]) -> none:

n = len(a)

self.move(n, a, b, c)

# 定義move 函式移動漢諾塔

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

if n == 1:

a.pop()

return

else:

self.move(n-1, a, c, b) # 將a上面n-1個通過c移到b

a.pop() # 這時,a空了

self.move(n-1,b, a, c) # 將b上面n-1個通過空的a移到c

Python(3)遞迴函式 漢諾塔

漢諾塔 有a,b,c三根柱子,在a柱子上從下往上按照大小順序摞著n圓盤。把圓盤從小到大重新擺放在柱子c上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。1.該問題可以分解成三個部分 把除最下面的圓盤,即 n 1 個圓盤,從a移到b 把最下面的圓盤從a移到c 把其餘 n 1 個...

遞迴解漢諾塔

漢諾塔問題是乙個經典的問題。漢諾塔 hanoi tower 又稱河內塔,源於印度乙個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著n片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三...

Python解漢諾塔問題

一 什麼是漢諾塔問題 這個問題 於印度。有三個金剛石塔,第乙個從小到大摞著64片 圓盤。現在把圓盤按大小順序重新擺放在最後乙個塔上。並且規定,在小圓盤上不能放大圓盤,在三個塔之間一次只能移動乙個圓盤。二 實現 a a b b c c def hanno a,b,c,n if n 1 print fo...