教你什麼是遞迴(python實現)

2021-10-23 01:45:39 字數 2756 閱讀 2041

遞迴:自己呼叫自己

下面我們通過實現從1加到100來理解遞迴。

從1加到100一般我們採用迴圈實現。

sum=0

for i in

range(1

,101):

sum+= i

print

(sum

)sum

=0

如果用遞迴實現

那麼就是

def

sum1

(max):

ifmax

<=

100and

max>=0:

#遞迴條件

return

max+ sum1(

max-1)

else

:return

0print

(sum1(

100)

)

將1加到100,是將問題拆分為,[1…99]+100,同時[1…99]可以拆分為[1…98]+99,這樣不斷地拆分下去,直到變為[1]+2,最後再將這些數加起來。

這裡同時涉及到遞迴地基線條件和遞迴條件。

遞迴是自己呼叫自己,當沒有結束條件時,便會無線呼叫自己,死迴圈。

如下面這個程式

def

countdown

(i):

print

(i) countdown(i-1)

countdown(

3)

本意是想要列印3到0停止,而因為沒有設定停止條件,導致無線迴圈,從而程式停止。

最終提示錯誤資訊

recursionerror: maximum recursion depth exceeded while calling a python object
故基線條件就是遞迴停止的條件。

那麼,這裡我們需要到達0停止,則程式修改如下:

def

countdown

(i):

print

(i)if i <=1:

#基線條件

return

else

: countdown(i-1)

countdown(

3)

而遞迴條件便是,每次需要改變的最小值。

如這裡將**改為

def

countdown

(i):

print

(i)if i <=1:

return

else

: countdown(i-2)

#遞迴條件為其值-2,不再是-1

countdown(

9)

棧就是乙個箱子,東西放進去以後,若要拿出最下面的東西,只有把上面的東西拿出來才能拿出最下面的東西。是乙個先進後出的結構

def

greet

(name)

:print

("hello,"

+ name +

"!")

greet2(name)

print

("getting ready to say bye ..."

) bye(

)def

greet2

(name)

:print

("how are you,"

+ name +

"?")

defbye()

:print

("ok,bye!"

)

greet(

"haobo"

)

最開始,棧為空,呼叫greet函式,那麼greet函式進棧。

開始執行,先print列印(在python中print也是乙個函式,這裡方便理解,省略其進棧過程。)

在greet執行過程中,呼叫了greet2函式,故greet2進棧。

執行greet2後,出棧,greet繼續執行,執行print後,再呼叫bey函式進棧執行。

最後執行完成後,棧為空。

執行結果如下:相信你能理解!

下面再用乙個遞迴求階乘的例子讓你更加能夠理解把。

def

fact

(x):

if x ==1:

return

1else

:return x * fact(x-1)

print

(fact(10)

)

將109…1>>10(9…1)>>10(9*(8*…1))最終變為10(9*(8*…*(1 )…)的樣子。

什麼是遞迴 先了解什麼是遞迴

一說起遞迴,我想每個人都不陌生。舉個從小就聽過的例子 從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山 還有你從兩面相對的鏡子中看到的畫面,其實都是抽象出來的遞迴現象,但是嚴格來說並不是遞迴,因為會一直重複下去,沒有終止條件,那就稱為...

什麼是遞迴 先了解什麼是遞迴

原文 一說起遞迴,我想每個人都不陌生。舉個從小就聽過的例子 從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山.還有你從兩面相對的鏡子中看到的畫面,其實都是抽象出來的遞迴現象,但是嚴格來說並不是遞迴,因為會一直重複下去,沒有終止條件,那...

什麼是遞迴 先了解什麼是遞迴

歡迎閱讀我的個人部落格,有更好的排版和文章 一說起遞迴,我想每個人都不陌生。舉個從小就聽過的例子 從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山,山里有座廟,廟裡有個和尚,和尚在講故事,從前有座山.還有你從兩面相對的鏡子中看到的畫面,其實都是抽象出來的遞迴現象,但是嚴格來說並不是遞迴...