Java-递归二进制搜索帮助

Java-递归二进制搜索帮助,java,recursion,Java,Recursion,下面的代码是我如何尝试创建递归二进制方法的 public static int binarySearch(Comparable[] objArray, Comparable item) { int lower=0; int upper=objArray.length -1; int i = -1; int compareResult; boolean found = false; while ((lower<=upper) &&am

下面的代码是我如何尝试创建递归二进制方法的

public static int binarySearch(Comparable[] objArray, Comparable item)
{

    int lower=0;
    int upper=objArray.length -1;
    int i = -1;
    int compareResult;
    boolean found = false;
    while ((lower<=upper) && (!found))
    {
        i=(lower+upper)/2;
        compareResult=item.compareTo(objArray[i]);
        if(compareResult<0)
        {
            upper=i-1;
        }
        else
            if (compareResult>0)
            {
                lower=i+1;
            }
            else
            {
                found=true;
            }


    }
    return compareResult;



}
publicstaticintbinarysearch(可比[]对象数组,可比项)
{
整数下限=0;
int upper=objArray.length-1;
int i=-1;
int比较结果;
布尔值=false;

而((lower您正在使用一个循环。为了使您的方法是递归的,它需要调用自己,直到达到某种中断条件

退房


本质上,您的“while”条件将是中断递归的条件(即停止方法调用本身),而当前循环的内容将改为设置“upper”和“lower”下一个递归调用的参数。

< P>一个二进制搜索的指南是,在这个例子中,将数组切成两半,然后检查可比较的对象是否大于或等于数组中间的对象。如果它较小,则将其设置为小于中间的一个(因为它已经被检查过)。下一个保持不变。如果更高,则将下一个移动到中间加上一,然后上一个保持不变。继续递归执行此操作,直到找到对象,或者直到当upper==lower时失败


如果你在比较对象,我会写你自己的compareTo()方法,以便您测试对象是否彼此更大、更小或相等。

Err使用递归时,您在方法中调用方法本身……我看不到您这样做。假设数组中只有一项。然后lower==upper,您将永远不会进入while循环。这与递归作业标记无关不再使用。我喜欢返回compareResult而不是索引的方式。