首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript Fibonacci方法

Javascript Fibonacci方法
EN

Stack Overflow用户
提问于 2016-06-09 19:26:59
回答 3查看 257关注 0票数 2

因此,我创建了fibonacci系列,但作为初学者,我在w3resources上发现的方式有点混乱。当n = 2变成fibonnacci_series(1)时到底会发生什么?但是这到底意味着什么呢?首先,为什么我们有var fibonacci_series = function(n),为什么不只是有一个名为function fibonacci_series(n)的函数?

代码语言:javascript
复制
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));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)的函数呢?

就你的目的而言,真的没有什么不同。技术上的答案是,第一个是函数表达式,第二个是函数声明,如果您对它们的不同之处感兴趣,看看这个堆栈溢出问题。

票数 1
EN

Stack Overflow用户

发布于 2016-06-09 19:28:49

这两行做的几乎是相同的事情(请参阅这里了解更多细节,但正如注释中所述,这可能与您现在的情况无关):

代码语言:javascript
复制
var fibonacci_series = function (n)   

function fibonacci_series(n)

这两个函数都定义了一个名为fibonacci_series的函数,它以n作为参数,它只是一个变体。

fibonacci级数函数是一个递归函数,它意味着它在其主体中调用自己(例如,函数中有fibonnacci_series(n-1) )。

n = 2时,s等于fibonnacci_series(1)的值,这是if语句返回的值。

票数 2
EN

Stack Overflow用户

发布于 2016-06-09 19:32:07

n = 2成为n - 1 (即[0,1])递归调用的结果时。然后,s.push(s[s.length - 1] + s[s.length - 2])用最后一个元素推进第二个最后元素的加法,这就是如何得到斐波纳契序列的。

这是fibonacci序列的一个递归实现。它也可以通过迭代来完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37734606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档