递归、二分法
递归
函数自己调用自己
最大深度: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