递归、二分法
递归
函数自己调用自己
最大深度:1000,一般到不了1000就停了
setrecursionlimit() 方法可以修改深度
使用递归方法打印1到10
def fun(x,y):
if x > y:
return
else:
print(x)
fun(x+1,y)
fun(1,10)
#结果:
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
二分法
核心:掐头去尾取中间,一次砍一半
两种算法:常规循环,递归循环
常规循环
def f(arr,t):
low = 0
height = len(arr)-1
while height >= low:
mid = (low+height) // 2
if t < arr[mid]: #low:mid
height = mid - 1
elif t > arr[mid]: # mid:height
low = mid + 1
else:
print("找到了在第%s个位置" % (mid + 1))
return
print("没有找到此值")
arr = [1,3,5,13,17,19,20,21,26,30]
f(arr,21)
f(arr,13)
f(arr,38)
#结果
#找到了在第8个位置
#找到了在第4个位置
#没有找到此值
递归循环
arr = [1,3,5,13,17,19,20,21,26,30]
def f(t,low,height):
if height >= low:
mid = (low+height) // 2
if t < arr[mid]: #low:mid
height = mid - 1
return f(t,low,height)
elif t > arr[mid]: # mid:height
low = mid + 1
return f(t,low,height)
else:
print("找到了")
return mid
else:
print("没有找到此值")
return -1
ret = f(26,0,len(arr)-1)
print(ret)
ret = f(11,0,len(arr)-1)
print(ret)
#结果
#找到了
#8
#没有找到此值
#-1

浙公网安备 33010602011771号