Javascript斐波那契方法

时间:2016-06-09 19:26:59

标签: javascript

所以我创建了斐波纳契系列,但是我在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));

3 个答案:

答案 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.