【问题标题】:How can I recursively generate an Array of the Fibonacci sequence?如何递归生成斐波那契数列数组?
【发布时间】:2023-04-06 15:01:01
【问题描述】:

我看过几篇关于生成给定斐波那契数列的帖子,例如this one。但是,我不知道如何使用递归为给定的n 生成斐波那契数的序列(返回一个数组)。我所拥有的显然不起作用,但我真的不知道该怎么做。

var fibArray = function(n) {
    var f = [];
    n < 2 ? f.push(n) : f.push(fibArray(n-1) + fibArray(n-2));
    return f;
};

【问题讨论】:

  • 字面意思是第一个搜索结果~How does the the fibonacci recursive function "work"?
  • 不是同一个问题,他要返回一个数组
  • @Phil 不能 100% 确定,但这可能是过早关闭,或者重复错误
  • @Omarjmh 更认为它可以为 OP 指明正确的方向
  • @Phil 我明白了,当然是您的来电,我提交了一个编辑 - 在您的最后评论之前,我觉得这是一个非常独特的问题,但我当然尊重你们!

标签: javascript arrays recursion fibonacci


【解决方案1】:

请注意,您以空数组开始每个函数调用,然后只向其中添加 1 个成员。那是行不通的。

您必须将新元素添加到从前一个fib(n - 1) 步骤返回的数组中。像这样:

function fib (n) {
    if (n < 2) {
        return [1];   
    }
    if (n < 3) {
        return [1, 1];
    }

    var a = fib(n - 1);
    a.push(a[n - 2] + a[n - 3]);
    return a;
};

nth 数字出现在阵列上的位置 n - 1。这证明了n - 2 = n - 1 - 1n - 3 = n - 2 - 1 的合理性。

【讨论】:

    【解决方案2】:

    上一个答案稍作修改的版本:

    function fib(n) {
      if (n == 0) return [0]
      if (n == 1) return [0, 1]
      const arr = fib(n - 1)
      return [...arr, arr[n-1] + arr[n-2]]
    }
    
    console.log(fib(15))

    【讨论】:

      【解决方案3】:

      这是一个不带扩展运算符的选项,并且可以在需要时启动序列:

      function fibonacciRecursion(amountNumbers = 4, sequence = [0, 1]) {
          if (amountNumbers > 0) {
              sequence.push(sequence[sequence.length - 1] + sequence[sequence.length - 2]);
              return fibonacciRecursion(amountNumbers - 1, sequence);
          }
          return sequence
      }
          
      console.log(fibonacciRecursion(10, [3,5]))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-27
        • 2012-11-19
        • 2016-11-07
        • 2012-02-16
        • 1970-01-01
        • 2011-12-18
        • 2015-04-25
        • 1970-01-01
        相关资源
        最近更新 更多