在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)
当前数组的Index
splitSize
将成为传递给
searchNum()
的新数组的Index
0

您应该始终将原始(完整)数组传递给递归调用,此外,还应该传递相关范围的第一个和最后一个索引

代码中的另一个错误是在
if(array[0]==item)
条件中,您返回的是item值,而不是该项的索引


除此之外,对于数组的奇数与偶数范围,您可能不必编写单独的逻辑。

这是否回答了您的问题?是的,但我将自己编写代码,不想复制/粘贴。为什么不将奇数和偶数的逻辑分开,您将如何管理这两种情况?