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

发布于 2022-09-02 20:15:12 字数 931 浏览 8 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁吢 2022-09-09 20:15:12

下面几个地方吧:

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));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文