Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归的二进制搜索_Java_Search_Binary - Fatal编程技术网

Java 使用递归的二进制搜索

Java 使用递归的二进制搜索,java,search,binary,Java,Search,Binary,我试图在Java中使用递归创建一个二进制搜索算法,调试时一切似乎都正常,直到找到值并返回所需键的索引为止。但是,由于某种原因,它跳过了return语句,并转到底部的return语句 public int binSearch(int key, int L, int R) { int mid =(R + L)/2; if (R < L) { return -1; } if (A[mid] == key) { return m

我试图在Java中使用递归创建一个二进制搜索算法,调试时一切似乎都正常,直到找到值并返回所需键的索引为止。但是,由于某种原因,它跳过了return语句,并转到底部的return语句

public int binSearch(int key, int L, int R) {

    int mid =(R + L)/2;

    if (R < L) {
        return -1;
    }

    if (A[mid] == key) {
        return mid;
    }

    if (key > A[mid]) {
        binSearch(key, mid + 1, R);
    }

    if (key < A[mid]) {
        binSearch(key, L, mid - 1);
    }
   return -1;
}
public int-bin搜索(int-key,int-L,int-R){
int mid=(R+L)/2;
if(RA[中间]){
b搜索(键,中间+1,R);
}
如果(键
您缺少一些返回语句(当您递归调用
binSearch
时)

public int-bin搜索(int-key,int-L,int-R){
int mid=(R+L)/2;
if(RA[中间]){
返回b搜索(键,中间+1,R);
}
如果(键
我能够从一次事故中挽救这一点。我知道它不能解决你的问题,但它向你展示了解决这个问题的另一种方法

public static int binarySearch(int[] a, int target) {
    return binarySearch(a, 0, a.length-1, target);
}

public static int binarySearch(int[] a, int start, int end, int target) {
    int middle = (start + end) / 2;
    if(end < start) {
        return -1;
    } 

    if(target==a[middle]) {
        return middle;
    } else if(target<a[middle]) {
        return binarySearch(a, start, middle - 1, target);
    } else {
        return binarySearch(a, middle + 1, end, target);
    }
}
公共静态int二进制搜索(int[]a,int目标){
返回二进制搜索(a,0,a.length-1,target);
}
公共静态int二进制搜索(int[]a,int开始,int结束,int目标){
中间整数=(开始+结束)/2;
如果(结束<开始){
返回-1;
} 
如果(目标==a[中间]){
返回中间;

}else if(target)思考当调用
binSearch(key,L,mid-1);
从递归返回时会发生什么情况。您不使用该函数调用返回的内容,而是返回底部的
-1
。因此,您可能应该说
return binSearch(…)
每次调用。您的if语句也已经检查了将
A[mid]
进行比较的所有情况。在检查这些比较时,使用
if-else
else
条件可能会使您受益。您缺少return语句。请尝试这种方法return-bin搜索()您的最后一个return语句将永远不会执行。那么,拥有这样的语句有什么意义呢?避免将代码重构为if-else以便编译它
public static int binarySearch(int[] a, int target) {
    return binarySearch(a, 0, a.length-1, target);
}

public static int binarySearch(int[] a, int start, int end, int target) {
    int middle = (start + end) / 2;
    if(end < start) {
        return -1;
    } 

    if(target==a[middle]) {
        return middle;
    } else if(target<a[middle]) {
        return binarySearch(a, start, middle - 1, target);
    } else {
        return binarySearch(a, middle + 1, end, target);
    }
}