所以我创建了斐波纳契系列,但是我在w3resources上发现的方式对我来说有点混乱。 n = 2
时到底发生了什么? s
变为fibonnacci_series(1)
,但这甚至意味着什么?首先,我们为什么要var fibonacci_series = function(n)
,为什么不只是有一个名为function fibonacci_series(n)
的函数?
var fibonacci_series = function (n)
{
if (n===1)
{
return [0, 1];
}
else
{
var s = fibonacci_series(n - 1);
s.push(s[s.length - 1] + s[s.length - 2]);
return s;
}
};
console.log(fibonacci_series(8));
答案 0 :(得分:2)
这两行几乎完全相同(有关详细信息,请参阅here,但正如评论中所述,这可能与您现在无关):
%L.0f
两者都定义了一个名为var fibonacci_series = function (n)
function fibonacci_series(n)
的函数,它将fibonacci_series
作为参数,它只是一个变体。
斐波纳契数列函数是一个递归函数,它意味着它在自己的体内调用自身(例如函数内部有n
)。
当fibonnacci_series(n-1)
时,n = 2
等于s
的值,这是fibonnacci_series(1)
语句返回的值。
答案 1 :(得分:1)
当n = 2
时,s成为n - 1
递归调用的结果([0,1]
)。然后,s.push(s[s.length - 1] + s[s.length - 2])
正在推动使用最后一个元素添加第二个最后一个元素,这是获得斐波那契序列的方式。
这是斐波那契序列的递归实现。它也可以通过迭代完成。
答案 2 :(得分:1)
n = 2
时到底发生了什么?s
变为fibonacci_series(1)
,但这甚至意味着什么?
这意味着您将获得与您自己调用fibonacci_series(1)
相同的结果。因此s
将是[0, 1]
。然后,将这两个数字的总和添加到数组的末尾,得到[0, 1, 1]
。这种关系(Nm = N(m-1)+ N(m - 2))是what defines the Fibonacci sequence.
以这种方式编写它意味着这个相同的过程将以递归方式发生。遵循这个逻辑,尝试写下n = 3
会发生什么。第一次拨打fibonacci_series
期间会发生什么?下一次调用fibonacci_series
将如何更改函数返回的内容?
首先我们为什么要
var fibonacci_series = function(n)
,为什么不只是有一个名为function fibonacci_series(n)
的函数?
出于您的目的,确实没有区别。技术答案是第一个是function expression,第二个是function declaration.如果您对它们的不同之处感兴趣,check out this Stack Overflow question.