【问题标题】:Can't wrap my head around this this recursion example [duplicate]无法理解这个递归示例[重复]
【发布时间】:2021-04-08 16:43:31
【问题描述】:

所以在 Eloquent JavaScript 的第 3 章中有一个递归示例,它是这样的:考虑这个难题:从数字 1 开始,反复加 5 或乘以 3,一个无限的集合 可以产生数字。你将如何编写一个函数,给定一个数字,试图找到一系列这样的加法和 产生那个数字的乘法?

给定的代码是..

function findSolution(target) {
  function find(current, history) {
    if (current == target) {
      return history;
    } else if (current > target) {
      return null;
    } else {
      return find(current + 5, `(${history} + 5)`) ||
        find(current * 3, `(${history} * 3)`);
    }
  }
  return find(1, "1");
}

现在有几件事我不明白。就像我们第一次调用函数一样,它会返回什么?它会返回 (1, "1") 并忽略内部函数 find? p>

示例中的 currenthistory 是什么?我不记得给他们赋值了吗?

【问题讨论】:

    标签: javascript function recursion multiplication addition


    【解决方案1】:

    第一次调用findSolution() 时,它将返回该函数find(1, "1") 的最后一行的结果。在这种情况下,“1”是历史记录,通过调用find 设置。 current的值为1,是find(1, "1")中的第一个参数

    要理解的重要一点是,您正在调用的函数正在调用新定义的函数find。该函数的结果将递归调用自身,这是留给读者(您)的练习。无论结果如何,findSolution 都会返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2011-09-27
      • 2023-04-09
      • 1970-01-01
      • 2022-01-24
      • 2016-08-07
      • 2012-11-08
      相关资源
      最近更新 更多