簡體   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