what' the python之遞歸函數與二分算法
阿新 • • 發佈:2018-01-05
hat 簡單的 not post col 組成 成了 n) spa
what‘s the 遞歸?
遞歸函數的定義:在函數裏可以再調用函數,如果這個調用的函數是函數本身,那麽就形成了一個遞歸函數。
遞歸的最大深度為997,這個是程序強制定義的,997完全可以滿足一般情況下用到遞歸的情形。
#最大997層
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
舉個栗子,假設你想知道A的年齡,但你只知道A比B大2歲,B又比C大兩歲,C又比D大兩歲,D比E大兩歲,恰好你知道E的歲數,那是不是就能知道A的歲數了呢,這就可以組成一個遞歸。那我們假設E的歲數是20
def age(n):
if n == 1:
return 20
else:
return age(n-1)+2
print(age(5))
二分算法
遞歸函數的一個經典用法就是二分算法,二分算法的意思是用對半切查找的方式從由一群由小到大的數組成的列表中找到要找的數字的方法
舉個栗子:
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] def func(l,aim): mid = (len(l)-1)//2 if l: if aim > l[mid]: func(l[mid+1:],aim) elif aim < l[mid]: func(l[:mid],aim) elif aim == l[mid]: print("bingo",mid) else: print(‘找不到‘) func(l,66) func(l,6)
以上就是簡單的二分算法,當然我們還可以將以上代碼進行改進,其實是一個意思。
def func(l, aim,start = 0,end = len(l)-1 ):
mid = (start+end)//2
if not l[start:end+1]:
return
elif aim > l[mid]:
return func(l,aim,mid+1,end)
elif aim < l[mid]:
return func(l,aim,start,mid-1)
elif aim == l[mid]:
print("bingo")
return mid
index = func(l,68)
print(index)
what' the python之遞歸函數與二分算法