标签:计算 UNC ret 无法 查找 while循环 fun color 找不到
1.while循环实现
li = [1,4,6,8,9,10,15,18] left = 0 right = len(li)-1 n = 99 while 1: if left<right: mid = (left+right)//2 if n>li[mid]: left = mid + 1 if n <li[mid]: right = mid-1 if n==li[mid]: print("找到了") break else: print("找不到") break
2.递归实现
li = [1,4,6,8,9,10,15,18] def func(n,left,right): if left<=right: mid = (left+right)//2 if n<li[mid]: right = mid-1 return func(n,left,right) # 但你用了递归后要返回一个值,前面的所有都要返回,不然是返回不到的 if n>li[mid]: left = mid + 1 return func(n,left,right) if n==li[mid]: print("找到了") return mid # 返回索引 else: print("找不到") return -1 a =func(4,0,len(li)-1) print(a)
3.另类方法实现,缺点(无法准确计算出第n个数原列表的索引)
lst = [1,2,5,7,9,25,35,43,47,49,55,58,61] def func(lst,taget): left = 0 right = len(lst)-1 if left>right: print("找不到") else: mid = (left+right)//2 if taget>lst[mid]: return func(lst[mid+1:],taget) elif taget<lst[mid]: return func(lst[:mid],taget) else: print("找到了") return func(lst,56)
标签:计算 UNC ret 无法 查找 while循环 fun color 找不到
原文地址:https://www.cnblogs.com/whileke/p/11318023.html