python二分查找+接收不到返回值的问题梳理

Posted 无伞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python二分查找+接收不到返回值的问题梳理相关的知识,希望对你有一定的参考价值。

一、二分查找

 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.自己调试了一会发现,二分查找用到了函数的递归,先一层一层递推,再一层一层回溯回来;那么最后函数接收到的返回值实际上是以最后回溯给函数的返回值为准;于是我进行了简单的梳理和分析。知道了为什么最后数据查询成功了,但是没有返回值;

 

以上是关于python二分查找+接收不到返回值的问题梳理的主要内容,如果未能解决你的问题,请参考以下文章

二分查找

Java-二分法查找提升

二分查找

Python二分搜索类函数,用于查找排序列表中大于特定值的第一个数字

Task 04:数组二分查找

查找2-二分查找