1 #二分法查找列表数
2 def find_num(li,num,start=0,end=None): # start和end 为系统默认参数
3 end =len(li)if end is None else end #开始时如果end为None 则让他为列表长度
4 li_index=(end-start)//2+start #计算中间值 //地板除取整
5 if start<=end: #索引的开头小于等于结尾
6 if num<li[li_index]:
7 return find_num(li,num,start=0,end=li_index-1) #如果结果比中间数小 结尾需要重新设置
8 if num>li[li_index]:
9 return find_num(li,num,start=li_index+1,end=end) #如果结果比中间数大,开头需要重新设置
10 elif num==li[li_index]: #如果相等 则就是他
11 return li_index
12 else: #开头大于结尾的序号 找不到这样的数字
13 return '找不到这个数'
14
15 li=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,51,53,59,61,67,71,73,79,83,89,97,101]
16 n=int(input('请输入要查找的数'))
17 f=find_num(li,n)
18 print(f)
用递归查找列表元素,则必须为有序列表 从大到小 或者从小到大
注意:start<=end 是可以找到的,尤其是等于否则忘记等于有些数就会找不到