递归
函数自己调用自己
最大深度: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 -1ret = f(26,0,len(arr)-1)print(ret)ret = f(11,0,len(arr)-1)print(ret)#结果#找到了#8#没有找到此值#-1