python递归_python3之递归
1、遞歸的特點
遞歸算法是一種直接或間接調用自身算法的過程,在計算機編程中,遞歸算法對解決一大類問題是十分,它往往使算法的描述簡潔而且易于理解。
遞歸算法解決問題的特點:
(1)遞歸就是在過程或函數里調用自身
(2)在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
(3)遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低,所以一般不提倡用遞歸算法設計程序。
(4)在遞歸調用的過程中系統為每一層的返回點、局部量等開辟了棧來存儲,遞歸次數過多容易造成棧溢出等。
2、遞歸的要求
遞歸算法所體現的“重復”一般有三個要求:
(1)每次調用在規模上都有所縮小(通常是減半)
(2)是相鄰兩次重復之間有緊密的聯系,前一次要為后一次做準備(通常前一次的輸出作為后一次的輸入)
(3)在問題的規模極小時必須用直接給出解答而不再進行遞歸調用,因而每次遞歸調用都是有條件的(以規模位達到直接解答的大小為條件)無條件遞歸調用將會成為死循環而不能正常結束。
簡單的遞歸函數實例:
def recursion(i): #定義函數
print(i)if i/2 > 1: #判斷遞歸條件,退出
re = recursion(i/2) #遞歸函數自身
print('返回值:',re)print('上層遞歸值:',i)return i #返回值
recursion(10)#運行原理:首先運行函數傳參10給函數,打印10,判斷條件滿足,遞歸#函數參數值為(10/2)5,打印i的值5,等遞歸到1.25時,判斷條件不滿#足后,才打印上層遞歸的值,此時遞歸的值為1.25,return遞歸最后一#層的值1.25,退出最后一層遞歸,繼續一層層退出遞歸,最后返回最上層#遞歸值結束函數。
10
5.0
2.5
1.25上層遞歸值:1.25返回值:1.25上層遞歸值:2.5返回值:2.5上層遞歸值:5.0返回值:5.0上層遞歸值:10
斐波那契數列:就是前兩個數的和為后一個數的值(0,1,1,2,3,5,8,13.........)
deffoo(arg1,arg2,stop):if arg1 ==0:print(arg1,arg2)
arg3= arg1 +arg2print(arg1,arg2,arg3)if arg3 < stop: #判斷套件不滿足時退出遞歸
foo(arg2,arg3,stop) #遞歸函數,傳送參數arg2,arg3,stop給arg1,arg2,stop
foo(0,1,50)
0101 1
1 1 2
1 2 3
2 3 5
3 5 8
5 8 13
8 13 21
13 21 34
21 34 55
利用切片遞歸方式,查找數據:
deftwosplit(sourceDate,findData):
sp= int(len(sourceDate)/2) #序列長度
if sourceDate[0] ==findData:print('找到數據:',sourceDate[0])return0else:if findData in sourceDate[:sp]: #判斷在左邊
print('數據在左邊[%s]' %sourceDate[:sp])
twosplit(sourceDate[:sp],findData)#遞歸函數
elif findData in sourceDate[sp:]: #判斷在右邊
print('數據在右邊[%s]' %sourceDate[sp:])
twosplit(sourceDate[sp:], findData)else:print('找不到數據')if __name__ == '__main__':
data= [1,2,'c',3,4,5,6,7,8,17,26,15,14,13,12,11,'a','b']#data = list(range(1000000))
twosplit(data,'c')
二位數組,順時針90度數據調換:
a = [[col for col in range(4)] for row in range(4)]for i in a:print(i) #打印二維數組
print('--------------------')for lf,rig in enumerate(a): #循環數組,打印數組下標和元素
for cf in range(lf,len(rig)): #從下標數組開始循環到列表長度
tmp = a[cf][lf] #存儲列表元素中的元素
a[cf][lf] =rig[cf]
a[lf][cf]=tmpprint('+++++++++++++++++')for i in a:print(i)'''#另一種方法
for i in range(len(a)):
ai = [a[i][i] for row in range(4)]
print(ai)'''
總結
以上是生活随笔為你收集整理的python递归_python3之递归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html中什么是语义,html – “语
- 下一篇: linux卸载openjdk_Linux