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而不是索引的方式。