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 ...