一、二分查找
1 def erfen_search(para1,find_num): 2 ''' 3 二分查找 4 :param para1: 要查找的范围,比如列表或元组 5 :param find_num: 要查找的数字 6 :return: 7 ''' 8 mid_index = len(para1)//2 9 mid_num = para1[mid_index ] 10 try: 11 if find_num == mid_num: 12 print('找到啦') 13 elif find_num > mid_num: 14 para1 = para1[mid_index+1:] 15 erfen_search(para1,find_num) 16 elif find_num < mid_num: 17 para1 = para1[:mid_index] 18 erfen_search(para1,find_num) 19 except IndexError: 20 print('未找到') 21 22 #函数调用 23 ls = [1,2,3,30,44,56,789,9000] 24 erfen_search(ls,56)
二、思考与问题:
1.自己在上面二分查找代码的基础上又优化了一下,想要在查找成功的时候,接收到一个返回值,比如接收的返回值内容为True
1 def erfen_search(para1,find_num): 2 ''' 3 二分查找 4 :param para1: 要查找的范围,比如列表或元组 5 :param find_num: 要查找的数字 6 :return: 7 ''' 8 mid_index = len(para1)//2 9 mid_num = para1[mid_index ] 10 try: 11 if find_num == mid_num: 12 print('找到啦') 13 return True #增加了一行代码,接收返回值 14 elif find_num > mid_num: 15 para1 = para1[mid_index+1:] 16 erfen_search(para1,find_num) 17 elif find_num < mid_num: 18 para1 = para1[:mid_index] 19 erfen_search(para1,find_num) 20 except IndexError: 21 print('未找到') 22 #函数调用 23 ls = [1,2,3,30,44,56,789,9000] 24 resault = erfen_search(ls,56) #用resault接收返回值 25 print(resault) #打印之后发现,resault 接收到的值是None ???为什么??? 26 27 #执行结果 28 找到啦 29 None
2.自己调试了一会发现,二分查找用到了函数的递归,先一层一层递推,再一层一层回溯回来;那么最后函数接收到的返回值实际上是以最后回溯给函数的返回值为准;于是我进行了简单的梳理和分析。知道了为什么最后数据查询成功了,但是没有返回值;