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)