遞迴說明:
遞迴一定要控制遞迴的層數,當符合某一條件是要終止遞迴,幾乎所有的遞迴都能用迴圈來代替
遞迴的優缺點:
優點:遞迴可以把問題簡單化,讓路徑更為清晰,**更為簡潔
缺點:遞迴因系統環境的影響大,當遞迴深度太大時,可能會得到不可預知的結果
示例:以下示意乙個無限遞迴的例子:
def fun():
print("我要吃好吃的")
fun()
fun()
當我們執行以上函式時,會無限迴圈列印"我要吃好吃的",這時系統會報乙個錯誤給我們,來終結這種迴圈錯誤為:
recursionerror: maximum recursion depth exceeded while calling a python object
意思是:recursionerror:呼叫python物件時,最大遞迴深度超過了
以下示意乙個列印100之內的和遞迴:
def fun(x):
if x==1:#出口
return 1
return x+fun(x-1)
print(fun(100))
當我們執行以上示例的時候會列印出100之內的和
講解:我們在寫遞迴的時候首先要定義乙個出口,當函式符合這個出口的時候,可以來終止遞迴
這裡我們定義出口時當 if x==1:的 時候,返回乙個1
當我們執行函式時,x=100,不符合條件會返回乙個100+fun(99)【100+前99的和】,99+fun(98),...,3+fun(2),2+fun(1),直到當x==1時,返回乙個1,這時函式執行是:2+1,這個值就是fun(2)的值,一次往上遞迴的執行函式
示意列印5的階乘:
def fun(x):
if x==1:
return 1
return x*fun(x-1)
print(fun(5))
以上示例是列印5的階乘
首先我們還是要定義乙個出口,來終止遞迴, if x==1:return 1
函式會一次執行的順序是x=5時,不符合條件,返回5*fun(4);x=4時,返回4*fun(3); x=3時,返回3*2; x=2時,返回2*fun(1),
這時fun(1)函式執行的 時候符合我們的出口,會向上層返回1, 這時fun(1)的值是1,fun(2)的就是2*1, 直到結束為止,這時就會列印出5的階乘
遞迴是乙個思想,我們首先要定義乙個出口,通過出口來跳出這中迴圈,根據我們想要設計的方法執行想要的結果
遞迴演算法的講解
在正式介紹遞迴之前,我們首先引用知乎使用者李繼剛 對遞迴和迴圈的生動解釋 遞迴 你開啟面前這扇門,看到屋裡面還有一扇門。你走過去,發現手中的鑰匙還可以開啟它,你推開門,發現裡面還有一扇門,你繼續開啟它。若干次之後,你開啟面前的門後,發現只有一間屋子,沒有門了。然後,你開始原路返回,每走回一間屋子,你...
遞迴的深度講解 dfs
遞迴就是自己呼叫自己的過程 雖然這就話在很多部落格上都這麼說,但我還是要說一遍 但是在學習遞迴的過程中,千萬不要像上面這麼理解 因為你會像套娃一樣的套個不停 強迫症 思路一 所以你要把內部的遞迴理解為呼叫其他的函式,例如 void dfs int index 保持這個思路繼續往下 思路二 在遞迴的過...
遞迴呼叫簡單的講解
學過資料結構的同學應該知道,遞迴呼叫其實就是c語言的棧,及棧裡的特點 先進後出的原則!沒學過的也沒關係,遞迴呼叫的實質也就是迴圈呼叫,下面我用乙個簡單的例子加以說明 include int main int f int m 這個程式是這樣執行的,首先你先隨便輸入乙個整數n,對於每個整數把n的值傳給m...