因此,我创建了fibonacci系列,但作为初学者,我在w3resources上发现的方式有点混乱。当n = 2变成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));发布于 2016-06-09 19:34:55
当
n = 2变成fibonacci_series(1)时到底会发生什么?但是这到底意味着什么呢?
这意味着您将得到相同的结果,就像您已经单独调用了fibonacci_series(1)一样。所以s将是[0, 1]。然后,将这两个数字的和添加到数组的末尾,从而得到[0, 1, 1]。这种关系(Nm = N(m-1) +N(m-2))是是什么定义了斐波纳契序列。
以这种方式编写它意味着这个过程将递归地发生。按照这个逻辑,试着写下如果n = 3会发生什么。在第一次调用fibonacci_series时会发生什么?下一次对fibonacci_series的调用将如何更改函数返回的内容?
首先,为什么我们有
var fibonacci_series = function(n),为什么不只是有一个名为function fibonacci_series(n)的函数呢?
就你的目的而言,真的没有什么不同。技术上的答案是,第一个是函数表达式,第二个是函数声明,如果您对它们的不同之处感兴趣,看看这个堆栈溢出问题。
发布于 2016-06-09 19:28:49
这两行做的几乎是相同的事情(请参阅这里了解更多细节,但正如注释中所述,这可能与您现在的情况无关):
var fibonacci_series = function (n)
function fibonacci_series(n)这两个函数都定义了一个名为fibonacci_series的函数,它以n作为参数,它只是一个变体。
fibonacci级数函数是一个递归函数,它意味着它在其主体中调用自己(例如,函数中有fibonnacci_series(n-1) )。
当n = 2时,s等于fibonnacci_series(1)的值,这是if语句返回的值。
发布于 2016-06-09 19:32:07
当n = 2成为n - 1 (即[0,1])递归调用的结果时。然后,s.push(s[s.length - 1] + s[s.length - 2])用最后一个元素推进第二个最后元素的加法,这就是如何得到斐波纳契序列的。
这是fibonacci序列的一个递归实现。它也可以通过迭代来完成。
https://stackoverflow.com/questions/37734606
复制相似问题