繁体   English   中英

为什么此递归函数会引发StackOverFlow错误?这是我执行二进制搜索的逻辑,错误的确切位置在哪里?

[英]Why this recursive function is throwing StackOverFlow error???this is my logic for binary search and Where is the exact point of error in it

这是我执行二进制搜索的逻辑,当我尝试运行它时,它给了我stackoverflow错误。...我也写了基本条件。 错误的确切位置在哪里。 对于此代码,我采用了具有预定义值的全局数组,并给出了初始的startIndex = 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 ,因此您的最后一个递归调用将使参数值完全相同的方法产生无限递归,这将导致堆栈溢出。

由于您已经在与Middle元素进行比较,因此您无需在递归搜索中包括Middle元素,因此将上一个递归调用替换为:

binarySearchInteger(searchingElement,middleIndex + 1,lastIndex);

您的代码中可能存在更多错误,但是仅通过查看它就发现了这一错误。 您可以使用调试器并逐步检查代码,准确查看会发生什么,从而自己发现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM