我被赋予了一个任务,要在列表中找到x
的索引位置。我已经尝试了很多次,但我似乎总是得到一些值的错误索引位置。规则是:
- 无内置函数
- 对所有可能的x有效
- 使用divide and conquer将列表一分为二,直到获得索引位置
- 列表已排序
我尝试使用while循环来实现递归函数,但这些都没有给我正确的答案。
下面是我的代码:
list1=[0,1,2,3,4,5,6,7,8] # change to get other values
x=int(input("Enter a number to get its index position: "))
def find_without_built_in_functions(list1, x, start, end):
if start<=end and x in list1:
mid=start+((end-1)//2)
if x==list1[mid]:
y=mid
return y
elif x<list1[mid]:
return find_without_built_in_functions(list1, x, start+1, mid)
elif x>list1[mid]:
return find_without_built_in_functions(list1, x, mid, end+1)
return -1
print(find_without_built_in_functions(list1, x, 0, len(list1)-1))
2条答案
按热度按时间mftmpeh81#
你的代码的问题是,在elif分支中,你没有正确地更新end和start的值。你应该增加start或减少end,这取决于你正在搜索列表的哪一半。
p1iqtdky2#
1.计算中点为两个端点的平均值,向下舍入。
1.当目标小于中间元素时,搜索空间应该缩小到
[start, mid)
。1.当目标大于中间元素时,搜索空间应缩小到
(mid, end]
。return -1
应该在if
块之外,以便当元素不存在时返回-1
而不是None
。