【问题标题】:Why is javascript recursive function returning 'undefined' even when I am returning a value [closed]为什么即使我返回一个值,javascript递归函数也会返回“未定义”[关闭]
【发布时间】:2020-03-25 02:37:35
【问题描述】:

我正在研究如何在 javascript 函数中实现二进制搜索,发现当我返回值并将其保存到变量中时,当我使用 console.log 时,这是未定义的。

const recursiveBinarySearch = (numbers, target) => {
    const midpoint = Math.floor(numbers.length / 2);

    if (numbers[midpoint] === target){
        //it does found the value and return
        return 'FOUND';

    } else if(numbers[midpoint] < target) {
        recursiveBinarySearch(numbers.slice(midpoint+1), target);

    } else {
        recursiveBinarySearch(numbers.slice(midpoint-1), target);

    }
}
var result = recursiveBinarySearch([1, 2, 3, 4, 6, 8, 100] , 8);
console.log(result); // Here is returning undefined

提前致谢。

【问题讨论】:

  • 缺少退货声明?
  • 你没有return递归的结果。
  • 在做了这么多年的javascript之后,我无法理解如果你不返回递归函数的结果,这个函数将返回未定义,一开始并不容易看到但要记住一些事情。

标签: javascript binary-search


【解决方案1】:

您需要一些return 语句。您也可以省略 else 语句,因为如果返回,它不会执行 else 部分。

const recursiveBinarySearch = (numbers, target) => {
  const midpoint = Math.floor(numbers.length / 2);

  if (numbers[midpoint] === target) {
    //it does found the value and return
    return 'FOUND';

  }

  if (numbers[midpoint] < target) {
    return recursiveBinarySearch(numbers.slice(midpoint + 1), target);
  }

  return recursiveBinarySearch(numbers.slice(midpoint - 1), target);
}
var result = recursiveBinarySearch([1, 2, 3, 4, 6, 8, 100] , 8);
console.log(result); // Here is returning undefined

【讨论】:

  • 为什么你总是回答应该关闭的问题?是为了名声吗?还是您不知道结束问题的原因?
  • 代表无关紧要,但显示问题所在比添加评论更容易。无论如何,我希望这个问题最后会被删除。
  • 我一定会投票删除它。
猜你喜欢
  • 1970-01-01
  • 2022-07-12
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2013-07-05
  • 2021-11-15
  • 1970-01-01
相关资源
最近更新 更多