var list = [1,2,3,4,5,6,7,8,9,10];
var binaryRecursiveSearch = function(list, search_num, left, right) {
var left = left || 0;
var right = right || list.length;
var middle;
var compare = function(a, b) {
console.log("compare a:"+a+", b:"+b);
if (a < b) return -1;
else if (a === b) return 0;
else return 1;
}
if (left <= right) {
middle = Math.round((left + right) / 2);
console.log("left: "+left+", right:"+right+", search_num:"+search_num);
switch (compare(list[middle], search_num)) {
case -1: return
binaryRecursiveSearch(list, search_num, middle+1, right);
case 0: return middle;
case 1: return
binaryRecursiveSearch(list, search_num, left, middle-1);
}
}
return -1;
}
binaryRecursiveSearch(list, 3);
下面几个地方吧:
var list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var binaryRecursiveSearch = function(list, search_num, left, right) {
var left = left || 0;
//第一处,right不能用||做默认参数处理,因为right的值可能是0,而0也是logical falsy
//第二处,右边界不能是数组长度,得-1
var right = right == null ? list.length - 1 : right;
var middle;
var compare = function(a, b) {
if (a < b) {
return -1;
} else if (a === b) {
return 0;
}
return 1;
}
if (left <= right) {
middle = Math.round((left + right) / 2);
switch (compare(list[middle], search_num)) {
case -1:
return binaryRecursiveSearch(list, search_num, middle + 1, right);
case 0:
return middle;
case 1:
return binaryRecursiveSearch(list, search_num, left, middle - 1);
}
}
return -1;
}
console.log(binaryRecursiveSearch(list, 8));