遞迴
遞迴是一種呼叫自身的方法,在函式執行過程中重複不斷的呼叫自身的過程,遞迴的規模每次都要縮小,一般前一步的程式作為後一步的引數。但是必須有遞迴結束條件。
遞迴演算法是一種直接或者間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題十分有效,它往往是演算法的描述簡潔而且易於理解。
遞迴演算法解決問題的特點:
(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,離大佬們的距離越來越遠,上去講了兩...