java - 为什么这个递归函数会抛出 StackOverFlow 错误???这是我的二分搜索逻辑,其中的确切错误点在哪里

标签 java recursion stack-overflow

这是我的二分搜索逻辑,当我尝试运行它时,它给出了 我的 stackoverflow 错误....我也写了基本条件。其具体错误点在哪里。 对于此代码,我采用了具有预定义值的全局数组,并初始给出startingIndex=0 和lastIndex=intArray.length-1;

public static void binarySearchInteger(int searchingElement,int 
   startingIndex,int lastIndex) {
    middleIndex=(startingIndex+lastIndex)/2;
    if(searchingElement==intArray[middleIndex])
        System.out.println("Found the Element");
    else if(startingIndex==lastIndex&&
                            searchingElement!=intArray[middleIndex])
        System.out.println("There is no such Element");
    else {
        if(intArray[middleIndex]>searchingElement)
            binarySearchInteger(searchingElement,
                                           startingIndex,middleIndex);
        else
          binarySearchInteger(searchingElement,middleIndex,lastIndex);
    }           
}

最佳答案

假设 startIndex == 0endIndex == 1,则 middleIndex 设置为 1/2 == 0(整数除法)。现在startIndex == middleIndex,因此您的最后一次递归调用将调用具有完全相同参数值的方法并导致无限递归,从而导致堆栈溢出。

由于您已经在与中间元素进行比较,因此不需要在递归搜索中包含中间元素,因此将最后一个递归调用替换为:

binarySearchInteger(searchingElement,middleIndex + 1,lastIndex);

您的代码中可能还有更多错误,但我仅通过查看就发现了这个错误。您可以通过使用调试器并单步执行代码来自行查找错误,准确查看发生的情况。

关于java - 为什么这个递归函数会抛出 StackOverFlow 错误???这是我的二分搜索逻辑,其中的确切错误点在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45996856/

相关文章:

Java - 将选项卡添加到 JTabbedPane 导致 StackOverflowError(禁用触发 ChangeEvent?)

java - 为什么我的 JTextField 没有被填充

postgresql - 在postgresql中使用递归创建多个递增列

javascript - 回溯递归以在二维数组中找到从源到目标的路径

python - 分层数据 : efficiently build a list of every descendant for each node

c++ - 如何增加 vstest.executionengine.x86.exe 的堆栈大小

java - 为什么我仍然使用尾递归斐波那契算法烧毁堆栈?

java - 如何访问Java中的内存位置?

java - 如何刷新 View 内容?

java - 使用 proguard 仅删除日志语句