我有一个递归函数的问题。它总是返回false,即使它是true。
我有以下名称的数组:
const tableaux = ["Nico","Luc","Paul","Jean","Samy",
"Domi","Cricri","André","Valérie","Mouss","Léon",
"Lionnel","Jacques","Marie","Vanessa","Mohammed","Fatou"];
这是我的功能:
tableaux.sort();
const binarySearch = (array, nameToFind, start, end) => {
if(start > end) {
return false;
}
let mid = Math.floor((start + end) / 2);
if(mid === nameToFind) {
return true;
}
if(nameToFind < tableaux[mid]) {
return binarySearch(array, nameToFind, start, mid - 1);
} else {
return binarySearch(array, nameToFind, mid + 1, end);
}
}
然后,当我使用数组中的名称时,它仍然返回false:
let test = binarySearch(tableaux, 'Marie', 1, 17);
console.log(test);
您正在执行以下操作:
let mid = Math.floor((start + end) / 2);
if (mid === nameToFind) {
return true;
}
在本例中,您为mid
指定一个数字(您要查找的索引(,然后直接将其与nameToFind
进行比较。您只需要与索引mid
中的项目进行比较即可:
let mid = Math.floor((start + end) / 2);
if (array[mid] === nameToFind) {
return true;
}