我偶然发现了代码中的某个问题,据说返回会停止我的方法,但就我而言并非如此。我试图制作一个称为“ 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正确实施此方法。

09-25 22:20