首页 > 解决方案 > 我的递归函数(javascript)总是返回假,即使它是真的

问题描述

我对递归函数有疑问。它总是返回假,即使它是真的。

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

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

标签: javascriptfunctionrecursion

解决方案


您正在执行以下操作:

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

推荐阅读