我正在尝试实现二进制搜索,不知怎的,我的函数没有返回想要的值
Asynctask
它一直在回归import math
def binarySearch(a, l, r, v):
if l >= r:
return -1
mid = math.floor((l + r)/ 2)
if a[mid] == v:
return mid
elif(v < mid):
binarySearch(a,mid+1,r,v)
else:
binarySearch(a,l,mid-1,v)
a = [1,2,5,8,23,67,345]
print(binarySearch(a,0,6,5));
在我出错的地方,有人可以开灯吗?
答案 0 :(得分:2)
你没有在elif语句中返回所以你的函数只返回-1
import math
def binarySearch(a, l, r, v):
if l > r:
return -1
mid = math.floor((l + r)/ 2)
if a[mid] == v:
return mid
elif(v < a[mid]):
return binarySearch(a,l,mid-1,v)
else:
return binarySearch(a,mid+1,r,v)
答案 1 :(得分:0)
试试这个:
int binarySearch(int arr[], int l, int r, int x)
{
if (r>=l)
{
int mid = l + (r - l)/2;
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(arr, l, mid-1, x);
return binarySearch(arr, mid+1, r, x);
}
return -1;
}