JavaScript中的二进制搜索算法超出最大调用堆栈大小

时间:2016-06-02 19:31:18

标签: javascript recursion binary-search

感谢您查看我的问题。我正在尝试在递归函数上实现二进制搜索算法,该函数将对已排序的数组进行操作。当我运行下面的代码时,我得到超出最大调用堆栈大小的错误。我认为这意味着我的基本案例没有捕获,但也许我只是没有看到它。

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;
}; 

1 个答案:

答案 0 :(得分:0)

只是一个小逻辑错误。如果当前元素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