首页 > 这个折半递归搜索哪里错了?

这个折半递归搜索哪里错了?

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));
【热门文章】
【热门文章】