Python筆記 遞迴函式 漢諾塔

2021-07-29 23:21:46 字數 778 閱讀 7894

1、如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。

2、使用遞迴函式需要注意防止棧溢位。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。

總體思路:

1、把a上,除了最大的(也是最下面的)盤子,借助c移動到b。

2、把最大的盤子,從a移到c。

此時:a無,b是n-1個,c有1個最大的。

3、把b上的n-2個盤子(就是除了b柱最底下的那個第2大的盤子),通過c移到a。

4、把b剩下的乙個第二大的盤子移到c上。

此時類似初始狀態:a從下到上,從大到小排列,還剩n-2個。b為空。c上面疊了1個最大的和1個第二大的。

5、開始新的一輪迴圈,迴圈步驟1234,直至結束。

def

mov(n, a, b, c):

if(n == 1):

print(a,'--->',c)

#只有乙個盤子,可以直接從a移動到c

else:

#通過分步減而治之

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

#先把上面的n-1個盤子借助c從a移到b

mov(1, a, b, c)

#再把a最下面的乙個盤子移到c

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

#再把b上的n-1個盤子借助a移動到c

漢諾塔遞迴 Python

今天繼續學習遞迴 終於 終於把 去年學c語言沒看懂也沒去研究的漢諾塔解決了 感謝網上眾多的老鐵們的資料相助 和 宿舍學長的幫助,好了以下說理解後的思路 1 n 1 第1次 1號盤 a csum 1 次 2 n 2 第1次 1號盤 a b 第2次 2號盤 a c 第3次 1號盤 b c sum 3 次...

Python實現遞迴函式 漢諾塔

def move a,b,c,n if n 1 print a,c else move a,c,b,n 1 print a,c move b,a,c,n 1 move a b c 3 以上為python 實現漢諾塔遞迴問題,關於程式過程,可以根據以下三幅圖作為輔助理解 1 當只有乙個盤子的時候,只需...

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...