簡體   English   中英

超過JavaScript最大調用堆棧大小的二進制搜索算法

[英]Binary Search Algorithm in JavaScript Max Call Stack Size Exceeded

感謝您檢查我的問題。 我試圖在將對排序數組進行操作的遞歸函數上實現二進制搜索算法。 當我運行下面的代碼時,出現最大調用堆棧大小超出錯誤。 我以為那意味着我的基本情況沒有抓住,但也許我只是沒有看到它。

var binarySearch = function(array, target, min, max) {

    min = min || 0;
    max = max || array.length - 1;

    if(min<=max){
      mid = Math.floor((min+max)/2);

      if(array[mid] === target){
        return mid;
      }
      else{
        if(array[mid]<target){
          min = mid-1; 
        }
        else{
          max = mid+1;
        }
      }
      return binarySearch(array,target,min,max);
    }
    return null;
}; 

只是一個小的邏輯錯誤。 如果當前元素array[mid]低於target ,則必須增加而不是減少mid (反之亦然):

var binarySearch = function(array, target, min, max) {

    min = min || 0;
    max = max || array.length - 1;

    if(min<=max){
      mid = Math.floor((min+max)/2);

      if(array[mid] === target){
        return mid;
      }
      else{
        if(array[mid]<target){
          min = mid+1; 
        }
        else{
          max = mid-1;
        }
      }
      return binarySearch(array,target,min,max);
    }
    return null;
};

binarySearch([0,1,2,3,4,5,6,7,8,9,10],6); // 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM