如何递归生成Fibonacci序列的数组?

时间:2016-04-05 00:37:35

标签: javascript arrays recursion fibonacci

我已经看过几篇关于生成给定斐波那契序列的帖子,例如this one。但是,我无法弄清楚如何使用递归生成给定n的斐波纳西数的序列(返回数组)。我明显没有用,但我真的无法弄清楚如何做到这一点。

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

3 个答案:

答案 0 :(得分:5)

请注意,您使用空数组启动每个函数调用,然后只添加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

的合理性

答案 1 :(得分:3)

上一个答案的略微修改版本:

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

答案 2 :(得分:0)

这是一个没有展开运算符的选项,并且可以选择在需要时启动序列:

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