day4 遞迴原理及解析

2022-08-03 19:30:17 字數 2294 閱讀 3017

遞迴

遞迴是一種呼叫自身的方法,在函式執行過程中重複不斷的呼叫自身的過程,遞迴的規模每次都要縮小,一般前一步的程式作為後一步的引數。但是必須有遞迴結束條件。

遞迴演算法是一種直接或者間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題十分有效,它往往是演算法的描述簡潔而且易於理解。

遞迴演算法解決問題的特點:

(1)遞迴就是在

(2)在使用遞迴測略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

(3)遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的效率較低。所以一般不提倡遞迴演算法設計程式。

(4)在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。

遞迴一般在結束條件之後呼叫自己,首先約定乙個遞迴結束條件,然後呼叫函式,直至遞迴結束位置。

遞迴演算法所體現的「重複」一般有三個要求:

一是每次呼叫在規模上都有所縮小(通常是減半);

二是相鄰兩次重複之間有密切的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入);

三是在問題的規模極小時必須用直接給出解答而不再進行遞迴呼叫,因而每次遞迴呼叫都是有條件的(以規模未達到直接解答的大小為條件),無條件遞迴調用將會成為死迴圈而不能正常結束。

遞迴演算法不是乙個高效的演算法,在記憶體中開闢棧來儲存,是自己呼叫自身的過程,如果遞迴的次數過多,容易造成棧溢位等。所以一般不推薦使用,但是在解決一類問題的時候很有用,比如二分法。

遞迴是在函式中實現的,下面來看乙個例子:

def calc(n):

if n/2 > 1

: #每次縮小一半進行運算

res = calc(n/2

) #再次呼叫函式,重新執行函式,形成遞迴,直至n/2

<=1為止

print(

"res:

",res)

print("n:

",n)

return

ncalc(

10)

上面**就是乙個遞迴過程,遞迴就是函式重複呼叫自身的過程,在乙個遞迴結束條件之下結束遞迴。上面**中,我們讓引數每次減半,當n/2≤1的時候結束遞迴。

上面**執行結果如下:

n: 1.25

res: 1.25

n: 2.5

res: 2.5

n: 5.0

res: 5.0

n: 10

如果函式沒有返回值,預設返回的返回值是none。這點要注意。

#用**實現斐波那契數列,0,,1,1,2,3,5,8,13,21,34.....

def fibonacci(arg1,arg2,stop):

#定義乙個函式,由於斐波那契是前乙個數字與後乙個數字相加,並且要有乙個結束條件

if arg1 == 0:

#起始位置

print(arg1,arg2)

arg3 = arg1 + arg2

if arg3 < stop:

#定義結束條件,遞迴的出口

print(arg3)

fibonacci(arg2,arg3,stop)

#以第一次的結果為這次的引數進行呼叫,形成遞迴迴圈,如果沒有遞迴出口,就是乙個死迴圈

fibonacci(0,1,50)

遞迴就是函式自身呼叫的方法,通過對自身的呼叫實現迴圈的方式,但是必須有乙個遞迴出口,在必要的時候結束迴圈,不然會一直迴圈不會停止。

def loop(arg1,arg2,stop):

if arg1 == 0

: print(arg1,arg2)

arg3 = arg1 +arg2

print(arg3)

#沒有遞迴出口,就是乙個死迴圈,函式沒有終止條件,不知道什麼時候終止迴圈

loop(arg2,arg3,stop)

loop(

0,1,50)

上面**就是乙個死迴圈,因為沒有終止條件,函式一直執行,當執行到函式的時候,就會繼續重新執行一次函式,我們就陷入了死迴圈。這樣也就失去了意義。所以斐波那契數列一定要有遞迴的結束條件。

day4 裝飾器深入解析

python裝飾器 裝飾器是在不修改原始碼給 新增功能的常用方法。是裝飾的標誌。我們知道,在給 增加功能的時候,要遵循開放封閉的原則,不能隨便更改原碼,因此裝飾器的功能就顯示出來了,只需要在函式前面加上裝飾器就能解決問題所需。def verification func 驗證模組 def inner ...

湖南集訓Day4

上午的數論感覺還可以,嗯,感覺。因為畢竟我數學弱,只聽懂一半什麼的,感覺證明還是比較顯然的。話說這金牌爺長得好像我某物理老師啊 下午的題終於不是clj出的了,沒辣麼虐了。第一題疑似回文自動機,然而並不會,於是dp水了60分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...

瀋陽集訓day4

憂傷地吐槽 記錄 沒錯,今天已經day5了,因為day4有點失敗,沒寫,大概就是這麼意思,t1寫的正解,t2線段樹,乙個小時可以搞出來的結果非得去寫第三題正解,還寫掛了只得了十分,初三的大佬20行 貪心得了八十,只是感到心累,t4單調棧也沒寫,才得了150 400,離大佬們的距離越來越遠,上去講了兩...