【发布时间】:2023-02-21 20:40:53
【问题描述】:
我正在尝试在 javascript 中执行我的第一个二进制搜索。但是我看不出是什么阻碍了我从我的代码中获得我期望的结果。
这是我的代码:
function search(arr, target, start = 0, end = arr.length - 1) {
if (start > end) {
console.log('Not found!');
return -1;
}
const middle = Math.floor((start + end) / 2);
if (arr[middle] === target) {
console.log(`${target} found at index ${middle}`);
return middle;
}
if (arr[middle] > target) {
return search(target, start, middle - 1);
}
if (arr[middle] < target) {
return search(target, middle + 1, end);
}
}
const arr = ['a', 'b', 'c', 'x', 'y', 'z'];
console.log(search(arr, 'b'));
所以当我运行上面的代码时,我的结果如下......
我越来越未找到!
我在期待什么b 在索引 1 处找到 1个
我对算法还很陌生,但我看不出这里发生了什么。即使只是从我遵循的指南中复制代码,我也会得到与老师得到的不同的结果。所以我认为一定有什么潜在的错误?
在此先感谢您抽出时间来帮助我!我正在努力学习并更好地理解这里。因此,如果我完全误解了这里显而易见的内容,请详细说明。
我在我的 Windows 10 机器上运行带有节点的程序,我使用的是 nodejs v18.14.1
【问题讨论】:
-
查看参数以及您如何称呼它!
function search(arr, target, start = 0, end = arr.length - 1)和return search(target, start, middle - 1);一个简单的 console.log 行就会告诉你发生了什么。console.log(arr, target, start, end)
标签: javascript algorithm