我已经看过几篇关于生成给定斐波那契序列的帖子,例如this one。但是,我无法弄清楚如何使用递归生成给定n
的斐波纳西数的序列(返回数组)。我明显没有用,但我真的无法弄清楚如何做到这一点。
var fibArray = function(n) {
var f = [];
n < 2 ? f.push(n) : f.push(fibArray(n-1) + fibArray(n-2));
return f;
};
答案 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 - 1
和n - 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]))