我无意中发现了代码中的一些问题,据说返回会阻止我的方法,但在我的情况下并非如此。我试着制作了一种名为"binarySearch“的方法,它应该做它应该做的事情。
public int binarySearch(int lowIndex, int highIndex, int[] arr, int val) {
int middleIndex = (lowIndex + highIndex ) / 2;
if(arr[middleIndex] < val) {
lowIndex = middleIndex;
} else if (arr[middleIndex] > val) {
highIndex = middleIndex;
} else {
return middleIndex;
}
binarySearch(lowIndex, highIndex, arr, val);
return 0;
}问题是,如果我已经找到了搜索值驻留的索引,else语句将返回它并停止。但是,我总是得到"0",这是我为默认返回return 0设置的值。因此,为了澄清起见,我在else语句上添加了一些文本,以确保它执行并返回middleIndex,然后文本出现,所以基本上我的循环进入了else语句,希望返回middleIndex,但它没有。也许递归和这事有关,但我不知道你们能不能帮我。
发布于 2018-07-11 04:38:07
因为您的方法的签名是public int binarySearch,这意味着您应该从binarySearch方法的递归调用返回int。在此方法的适当实现中,您不应该真正地使用return 0。
发布于 2018-07-11 04:38:06
您必须返回递归的结果。您可以参考下面所示的代码来了解您所做的错误。
// Returns index of x if it is present in arr[l..
// r], else return -1
int binarySearch(int arr[], int l, int r, int x)
{
if (r>=l)
{
int mid = l + (r - l)/2;
// If the element is present at the
// middle itself
if (arr[mid] == x)
return mid;
// If element is smaller than mid, then
// it can only be present in left subarray
if (arr[mid] > x)
return binarySearch(arr, l, mid-1, x);
// Else the element can only be present
// in right subarray
return binarySearch(arr, mid+1, r, x);
}
// We reach here when element is not present
// in array
return -1;
}有关BinarySearch及其实现的更多信息,您可以按照这链接
发布于 2018-07-11 04:38:27
这里是用于二进制搜索的迭代java代码,您的代码有一些缺陷。
int binarySearch(int arr[], int x) {
int l = 0, r = arr.length - 1;
while (l <= r) {
int m = l + (r-l)/2;
if (arr[m] == x)
return m;
if (arr[m] < x)
l = m + 1;
else
r = m - 1;
}
return -1;
}https://stackoverflow.com/questions/51277278
复制相似问题