[英]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.