【问题标题】:My recursive function (javascript) always return false, even when it's true我的递归函数(javascript)总是返回假,即使它是真的
【发布时间】: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


【解决方案1】:

您正在执行以下操作:

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

【讨论】:

  • 哦,对了,我使用了tableaux[mid],现在它正在工作,干杯!
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
相关资源
最近更新 更多