我有这个函数来进行二分搜索
const binarySearch = (array, value) => {
let min = 0;
let max = array.length - 1;
return doBinary(array, min, max, value);
};
/**
* DoBinary
*/
function doBinary(arr, min, max, key) {
let med = Math.floor((min + max) / 2);
let diff = max - min;
if (arr[med] === key) {
console.log(med) // <====================== med here is correct, but it returns only undefined
return med; // <========================= problem in this line
/*
* Returns only if the Index of the key that I'm searching for, `equals` the middle of the original array
* otherwise, returns undefined,
*/
}
else if (diff > 0 && arr[med] < key) {
min = med + 1;
doBinary(arr, min, max, key);
}
else if (diff > 0 && arr[med] > key) {
max = med - 1;
doBinary(arr, min, max, key);
}
else return -1;
// return med;
}
仅当我正在搜索的键的索引等于
原始数组的中间时,此函数才会返回。否则,返回未定义。
示例:
A = [1,2,3,4,5];
binarySearch(A, 1) //undifined
binarySearch(A, 2) //undifined
binarySearch(A, 3) //2
binarySearch(A, 4) //undifined
binarySearch(A, 5) //undifined
最佳答案
请查看更新后的代码,使用递归函数时需要返回 doBinary
响应。
function doBinary(arr, min, max, key) {
let med = Math.floor((min + max) / 2);
let diff = max - min;
if (arr[med] === key) {
console.log(med) // <====================== med here is correct, but it returns only undefined
return med; // <========================= problem in this line
/*
* Returns only if the Index of the key that I'm searching for, `equals` the middle of the original array
* otherwise, returns undefined,
*/
}
else if (diff > 0 && arr[med] < key) {
min = med + 1;
return doBinary(arr, min, max, key);
}
else if (diff > 0 && arr[med] > key) {
max = med - 1;
return doBinary(arr, min, max, key);
}
else return -1;
// return med;
}
关于javascript - 二分查找函数是正确的,但返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585873/