py 遞迴例項 漢諾塔問題

2022-02-24 15:12:52 字數 635 閱讀 5683

遞迴的兩個特點

# _*_coding:utf-8

'''遞迴例項:漢諾塔問題

n----盤子總數

a----第乙個柱子

b----第二個柱子

c----第三個柱子

n個盤子時:

1、將n-1個盤子,從a經過c移動到b

2、把n-1個盤子,從a移動到c

3、把n-1個盤子,從b經過a移動到c

'''#a,b,c 從a開始,經過b,移動到c

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

if n>0:

hanoi(n-1,a,c,b)

print("moving from %s to %s" %(a,c) )

hanoi(n-1,b,a,c)

hanoi(3,"a","b","c")

'''ps

moving from a to c

moving from a to b

moving from c to b

moving from a to c

moving from b to a

moving from b to c

moving from a to c

'''

遞迴例項(漢諾塔)

遞迴在實現過程中是借助於棧來實現的。高階語言的函式呼叫,每次呼叫,系統都要自動為該次呼叫分配一系列的棧空間用於存放此次呼叫的相關資訊 返回位址,區域性變數等。這些資訊被稱為工作記錄 或活動記錄 而當函式呼叫完成時,就從棧空間內釋放這些單元,但是,在該函式沒有完成前,分配的這些單元將一直儲存著不被釋放...

漢諾塔問題(遞迴)

題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...

漢諾塔問題(遞迴)

問題 漢諾塔問題 解法 遞迴求解 思路 先把n 1從a移動b 在把第n個從a移到c 使用遞迴使得 變得簡單 複雜度 2的n次方 1 includeint step 1 void hanoi int level,char a,char b,char c 1 當盤子數大於1時,先把n 1個從a借助c移動...