在java中使用递归进行二进制搜索时出现错误值
我试图使用递归实现二进制搜索,但没有得到预期的正确结果。代码如下:在java中使用递归进行二进制搜索时出现错误值,java,recursion,binary-search,Java,Recursion,Binary Search,我试图使用递归实现二进制搜索,但没有得到预期的正确结果。代码如下: import java.util.*; class BinarySearchRecursion{ static private int searchNum(int[] array, int item){ if(array.length >=2){ int remainder = array.length%2; int splitSize = arra
import java.util.*;
class BinarySearchRecursion{
static private int searchNum(int[] array, int item){
if(array.length >=2){
int remainder = array.length%2;
int splitSize = array.length/2;
if(remainder==0){
if(item> array[splitSize-1]){
int num = searchNum(Arrays.copyOfRange(array,splitSize,array.length), item);
return num;
}else{
int num = searchNum(Arrays.copyOfRange(array,0,splitSize), item);
return num;
}
}else{
if(array[splitSize]== item)
return splitSize;
if(item> array[splitSize-1]){
int num = searchNum(Arrays.copyOfRange(array,splitSize,array.length), item);
return num;
}else{
int num = searchNum(Arrays.copyOfRange(array,0,splitSize), item);
return num;
}
}
//System.out.println(splitSize);
}else{
if(array[0] == item){
System.out.println("Item exist");
return item;
}
else
return -1;
}
//return -1;
}
public static void main(String... args){
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int index = searchNum(arr, 89);
if(index != -1){
System.out.println("Number exist: "+ Integer.valueOf(index));
}
else
System.out.println("Number does not exist in the given list.");
}
}
我没有得到正确的项,例如如果我搜索8,它会给我值2,等等。我在这里做错了什么?您正在尝试搜索数组中给定数字的索引,但是由于递归方法不断将子数组传递给递归调用,索引不断变化 例如,当你打电话时
searchNum(Arrays.copyOfRange(array,splitSize,array.length), item)
当前数组的IndexsplitSize
将成为传递给searchNum()
的新数组的Index0
您应该始终将原始(完整)数组传递给递归调用,此外,还应该传递相关范围的第一个和最后一个索引
代码中的另一个错误是在if(array[0]==item)
条件中,您返回的是item值,而不是该项的索引
除此之外,对于数组的奇数与偶数范围,您可能不必编写单独的逻辑。这是否回答了您的问题?是的,但我将自己编写代码,不想复制/粘贴。为什么不将奇数和偶数的逻辑分开,您将如何管理这两种情况?