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