【发布时间】:2020-07-07 01:37:32
【问题描述】:
我正在尝试编写一个简单的二进制搜索函数来查找数组中的值并返回它的位置,如果不存在则返回 -1。通过控制台日志,我可以看到它在内部工作,但没有返回我想要的。它总是返回 undefined...
function binarySearch(arr, q) {
// set left right middle
let left = 0,
right = arr.length - 1,
middle = Math.floor(arr.length / 2);
// check if the middle is q
if (arr[middle] === q) {
return middle;
}
console.log(checkMiddle(left, right, middle));
let answer = checkMiddle(left, right, middle);
function checkMiddle(l, r, m) {
console.log(r - l);
if (r - l === 1) {
console.log('not found');
return -1;
}
if (arr[m] === q) {
// if yes return middle
console.log('found');
console.log(m);
return m;
}
//if not find if q is > or < middle
if (q > arr[m]) {
// if > move left to middle
l = m;
//move middle to new middle
} else {
//if < move right to middle
r = m;
}
m = Math.floor((r + l) / 2);
//search again
console.log(l, r, m);
checkMiddle(l, r, m);
}
return answer;
}
let arr = [1, 2, 3, 4, 5, 6, 7, 55, 192, 5000, 666666, 8888888, 1055556565456],
q = 10;
console.log(binarySearch(arr, q));
【问题讨论】:
-
您的 checkMiddle 方法没有返回任何内容,因此答案未定义
-
@HarmandeepSinghKalsi 但是在第 23 行我有
console.log(m);然后在第 24 行我有return m; 23 将 console.log 我想要返回的内容,但 24 没有返回 -
由于你使用的是递归,return 也可以意味着你正在返回到之前的调用堆栈
-
@HarmandeepSinghKalsi 好的,我该如何解决?我很迷茫
-
请在这里查看一次geeksforgeeks.org/…