二进制搜索程序返回错误的位置



我为二进制搜索编写了一个递归程序,正如你所看到的,我试图在给定的数组中找到目标=21的位置,因此应该将我的位置返回为2。然而,我的输出是1。当我调试它时,它匹配attarr[start]=target,然而它直接跳到了findTheNumber行(arr,mid+1,end,target(;然后是下一行,然后在中间返回。只是想知道为什么我的返回在"返回开始"处中断

package Recursion;
public class BinarySearch {
static int  mid = 0;
public static int findTheNumber(int[] arr, int start, int end, int target) {

if (arr[start] == target) {
return start;
}
mid = (start + end) / 2;
if (arr[mid] == target) {
return mid;
} 
if (target >arr[mid]) {
findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
findTheNumber(arr, start, mid-1, target);
}
return mid;
}

public static void main(String[] args) {
int[] arr = { 10, 12,21 };
int start = 0;
int end = arr.length - 1;
int target = 21;
System.out.println(findTheNumber(arr, start, end, target));
}

}

if (target >arr[mid]) {
findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
findTheNumber(arr, start, mid-1, target);
}

您只是在那里返回mid点,而不是递归调用的实际结果
您的代码应该看起来像:

if (target >arr[mid]) {
return findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
return findTheNumber(arr, start, mid-1, target);
}

最新更新