【发布时间】:2020-08-05 14:48:23
【问题描述】:
我对递归函数有疑问。它总是返回 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);
【问题讨论】:
-
mid是一个索引,所以mid == nameToFind永远不会是真的。 -
if(mid === nameToFind),mid是一个数字 -
这是使用控制台进行调试的地方,可以方便地查看为什么不工作。如果条件不适合我,我倾向于这样做
console.log(mid, nameToFind, mid===nameToFind); if(mid === nameToFind) {这样做你会发现问题。 -
强烈建议:不要使用
tableaux[mid],而应使用array[mid]。这将使您的函数更普遍有用且更易于测试。
标签: javascript function recursion