二进制搜索程序返回错误的位置
Binary Search Program returning wrong position
我写了一个二进制搜索的递归程序,如你所见,我试图在给定的数组中找到目标 =21 的位置,因此 return 我应该将其定位为 2。但是我的输出是 1。虽然我调试它匹配 att arr[start]=target,但是它直接跳转到 findTheNumber(arr, mid + 1, end, target) 行;然后是下一行,然后是 return mid.. 只是想知道为什么我的 return 在 "return start"
处中断
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);
}
我写了一个二进制搜索的递归程序,如你所见,我试图在给定的数组中找到目标 =21 的位置,因此 return 我应该将其定位为 2。但是我的输出是 1。虽然我调试它匹配 att arr[start]=target,但是它直接跳转到 findTheNumber(arr, mid + 1, end, target) 行;然后是下一行,然后是 return mid.. 只是想知道为什么我的 return 在 "return start"
处中断 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);
}