因此,我已经被指示创建一个带有2个参数的函数,一个列表和一个数字,它使用二进制递归搜索来查看数字是否在列表中。如果数字在列表中,我将返回其索引,如果不是,我将返回-1。到目前为止我已经
了def findIndex(alist,num):
print(alist)
if len(alist) % 2 == 0:
mid = int((len(alist)/2)-1)
else:
mid = ((len(alist)//2))
if alist[mid] == num:
print(mid)
elif alist[mid] > num:
findIndex(alist[0:mid],num)
elif alist[mid] < num:
findIndex(alist[mid+1:],num)
我知道二进制搜索是如何工作的。如果不是您要搜索的号码,请将该号码与您正在搜索的号码进行比较。如果它大于您搜索的数字,请搜索列表的前半部分。如果较小,再次搜索列表的后半部分。问题是我的代码仅适用于I&#39; m搜索的数字小于每种情况下的中间数字的情况。
答案 0 :(得分:1)
<强>分析强>
逻辑有几个问题。
<强>解强>
有两种直接的方法可以解决这个问题。第一种是使用 findIndex 作为包装函数,并编写要由其调用的函数。例如:
def findIndex(alist,num):
return binaryFind(alist, 0, len(alist), num)
def binaryFind(alist, left, right, target):
# Here, you write a typical binary search function
# with left & right limits.
第二种方法是返回找到的索引,但是在切断列表左半部分的所有时间都要调整它。每个级别的调用都必须将该调整添加到返回值,将总和传递回上一级别。简单的情况看起来就是这样,你将在列表的右半部分重复出现:
elif alist[mid] < num:
return (mid+1) + findIndex(alist[mid+1:], num)
这会让你走向一个有用的解决方案吗?