#递归函数
#递归: 自己调用自己
# 默认递归次数998
# 可以自己设置递归次数
def age(n):
if n==1:
return 26 #当下面的age(4)依次拿到一的时候这里就返回26,然后和下面累加三次的2相加
else:
return age(n-1)+2 #这里的返回值每次都累加2,从4到2一共累加三次,
print (age(4)) #把这里的4一个一个的递给age(n)这里的n,第一次递上去的是4,第二次是3,依次递归
# 结果:32
#递归到一定次数,就回去主动终止,一般是998
def func(x):
x+=1
print (x)
func(x)
n=0
func(n)
# 一直累加到998
import sys
sys.setrecursionlimit(10000) #这里给递归函数设置一个最大值,其实电脑跑不到这么多,只会跑到电脑的最大极限
def func(x):
x+=1
print (x)
func(x)
n=0
func(n)
# 二分查找
# 算法, 最经典最简单的算法.
# 前提: 有序的不重复的数字序列.
l1 = [2, 3, 5, 10, 15, 16, 18]
def two_find(l,aim,start=0,end=None):
end = len(l)-1 if end is None else end
mid_index=(end-start)//2+start
if start <= end:
if aim>l[mid_index]:
return two_find(l,aim,start=mid_index+1,end=end)
elif aim<l[mid_index]:
return two_find(l,aim,start=start,end=mid_index)
elif aim==l[mid_index]:
return mid_index
else:
return None
print (two_find(l1,15))
#二分查找,用while循环做
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
n=11
kai=0
wei=len(lst)-1
count=1
while kai<=wei:
middle=(kai+wei)//2
if n > lst[middle]:
kai=middle+1
elif n<lst[middle]:
wei=middle-1
else:
print('存在')
print(middle)
break
count=count+1
else:
print('不存在')
# 用递归写二分查找
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
def func(kai,wei,n):
zhong=(kai+wei)//2
if kai>wei:
return -1
if n > lst[zhong]:
kai=zhong+1
elif n<lst[zhong]:
wei=zhong-1
else:
return zhong
return func(kai,wei,n) #这个return必须加,不然返回的一直是None
print(func(0,len(lst)-1,66))