我偶然发现了代码中的某个问题,据说返回会停止我的方法,但就我而言并非如此。我试图制作一个称为“ binarySearch”的方法,据说该方法可以完成其工作。
public int binarySearch(int lowIndex, int highIndex, int[] arr, int val) {
int middleIndex = (lowIndex + highIndex ) / 2;
if(arr[middleIndex] < val) {
lowIndex = middleIndex;
} else if (arr[middleIndex] > val) {
highIndex = middleIndex;
} else {
return middleIndex;
}
binarySearch(lowIndex, highIndex, arr, val);
return 0;
}
问题是如果我已经找到搜索值所在的索引,则else语句将返回该索引并已停止。但是,我总是得到“ 0”,这是我为默认返回值设置的值
return 0
。因此,为了澄清起见,我在我的else语句上添加了一些文本以确保其执行并返回middleIndex
,然后出现该文本,因此基本上我的循环进入了else语句,希望返回了middleIndex
,但不是。也许递归与此有关,但我不知道也许你们可以帮助我。 最佳答案
由于方法的签名为public int binarySearch
,这意味着您应该从binarySearch
方法的递归调用中返回int。您不应该真正地return 0
正确实施此方法。