Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的递归函数(javascript)总是返回false,即使它';这是真的_Javascript_Function_Recursion - Fatal编程技术网

我的递归函数(javascript)总是返回false,即使它';这是真的

我的递归函数(javascript)总是返回false,即使它';这是真的,javascript,function,recursion,Javascript,Function,Recursion,我对递归函数有一个问题。它总是返回false,即使它是真的 我有以下带有名称的数组: const tableaux = ["Nico","Luc","Paul","Jean","Samy", "Domi","Cricri","André","Valérie","Mouss","Léon&q

我对递归函数有一个问题。它总是返回false,即使它是真的

我有以下带有名称的数组:

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);
    }
}

您正在执行以下操作:

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;
}

mid
是一个索引,因此
mid==nameToFind
将永远不会为真。
如果(mid==nameToFind)
mid
是一个数字,这就是使用控制台进行调试的地方,可以方便地查看事情不起作用的原因。如果条件不适合我,我倾向于执行
console.log(mid,nameToFind,mid==nameToFind);如果(mid===nameToFind){
这样做,你就会发现问题。一个强烈的建议:不要使用
tableaux[mid]
,而是使用
array[mid]
。这将使你的函数更有用,更容易测试。哦,对了,我使用了
tableaux[mid]
,它现在开始工作了,干杯!
let mid = Math.floor((start + end) / 2); 

if (array[mid] === nameToFind) {
  return true;
}