遞迴的理解

2021-09-12 18:25:56 字數 437 閱讀 1968

def digui(x):

if x==1: #設定基線條件,也就是出口,讓遞迴停止對自身函式的呼叫

return 1

else:

return x*digui(x-1) #呼叫自身函式

print(digui(5))

解釋:遞迴的兩個條件是基線條件和遞迴條件,基線條件就是為呼叫設定出口避免死迴圈,遞迴條件就是呼叫自身函式。從棧的層面理解遞迴,就是每呼叫一次函式,就會將這個函式壓在棧裡,由於棧是後進先出的,第一次的函式呼叫在棧底,每呼叫一次函式往棧裡壓乙個函式,就好比往彈匣裡壓子彈。等到到出口了,開始從最上面依次彈出,得到了出口的返回值,然後得到下乙個的返回值,最終回歸到第一次呼叫函式得到返回值,整個過程就好比偵探推理,從後面根據『線索』往前推理,最終還原真相,從出口x=1依次往前推導最終的到結果。整個過程是從後往前回歸的所以遞迴。

遞迴的理解

對於遞迴問題,一定要明確的一點是,初始呼叫該函式時的輸入是什麼樣的 遞迴能夠奏效的前提是,問題的規模一定是減少的,或者更為嚴謹地說,問題一定是朝著遞迴結束的條件執行的 遞迴函式的第乙個要執行的就是 if 判斷,也即每進入一次遞迴,都要首先判斷是否到達遞迴的結束,n 0 其次還要明晰遞迴函式的功能,是...

遞迴的理解

本篇文章只要是實現最大公倍數的遞迴實現方法。最大公倍數是指兩個數能夠被一組數同時整除,其中最大的那個數就叫做最大公倍數,求解最大公倍數這裡主要說兩個想法,其實就是將複雜的問題簡化逐步簡化到乙個很小的問題,然後求得答案。假設有兩個數 252和105 252 21 12 105 21 5 252 105...

遞迴的理解

先考慮第一步,在考慮第二步,第二步可能與第一部的解法思路相同,範圍卻小了 然後一直分解。直到邊界有返回值 特例 下面是個關於遞迴呼叫簡單但是很能說明問題的例子 cpp view plain copy 遞迴例子 include void up and down int int main void vo...