python - Python二进制搜索算法返回无
问题描述
因此,我尝试在 python 中进行二进制搜索,我认为这在语法上是正确的,但在逻辑上某个地方出了问题,尽管检查了无数次。这是我的代码。
def m(a,ele):
a=a
ele=ele
length = len(a)
if length <=1:
return a
mid = a[length//2]
if ele == mid:
return True
elif ele > mid:
print("if")
if len( a[a.index(mid):]) == 0:
return False
elif len( a[a.index(mid):]) ==1 and ele != a[a.index(mid):]:
return False
elif len( a[a.index(mid):]) ==1 and ele == a[a.index(mid):]:
return True
else:
m( a[a.index(mid):],ele)
else:
print("else")
if len( a[:a.index(mid)]) == 0:
return False
elif len( a[:a.index(mid)]) ==1 and ele != a[:a.index(mid)]:
return False
elif len( a[:a.index(mid)]) ==1 and ele == a[:a.index(mid)]:
return True
else:
m( a[:a.index(mid)],ele)
print(m([1,3,6,8],8))
所以,在这种情况下,它应该打印 True,但它打印的是 None。有关此代码的任何帮助都会有所帮助,我知道我正在犯一些愚蠢的错误。
解决方案
您需要返回每一步递归的结果。(在所有其他的)
else:
return m( a[a.index(mid):],ele)
推荐阅读
- python - 如何使用scrapy循环遍历HTML以按顺序获取数据?
- ldap - 如何检索 OpenLDAP 密码历史列表
- c++ - 没有饥饿的简单读/写锁实现
- javascript - AngularJS:无法选择默认下拉值
- python-3.x - 插入图像时,Tkinter 按钮不起作用
- vector - 需要在 C++ 中更改多维字符串向量的元素
- python-3.x - 如何在 Python 中有效地查找区间索引
- r - R编程,我需要找到使用monte carlo sim在样本中获得三个特定字母所需的预期抽签数量
- react-native - 避免从反应原生组件建立累积/多个套接字连接的最佳实践是什么
- python - 从宽格式的时间序列数据中删除前两个有效数据点