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

时间:2017-09-01 09:14:20

标签: 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);
    }           
}

1 个答案:

答案 0 :(得分:1)

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

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

binarySearchInteger(searchingElement,middleIndex + 1,lastIndex);

您的代码中可能会有更多错误,但我只是通过查看它找到了这个错误。您可以通过使用调试器并逐步执行代码来查找错误,并准确查看发生的情况。