JS实现斐波那契数列

一:概念
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

它的规律是:这个数列从第 3 项开始,每一项都等于前两项之和。

二:实现方法
方法一:递归
递归方法虽然直观,但效率较低,因为会有大量的重复计算。

function fib(n){
    if(n<=1){
        return 1
    }else{
        return fib(n-1)+fib(n-2)
    } 
}

//产生10个斐波那契数列
for(var i=0; i<10; i++){
    console.log(fib(i))
}

方法二:迭代
迭代方法通常比递归方法更高效,因为没有重复计算。

function fib(n){
    if(n<=1){
        return n
    }else{
        let first = 0
        let second = 1
        let result
        for(let i=2; i<=n; i++){
            result = first + second
            first = second
            second = result
        }
        return result
    }
}
//产生10个斐波那契数列
for(var i=0;i<10;i++){
    console.log(fib(i))
}

方法三:动态规划
通过保存已经计算过的值来避免重复计算,提高效率。

function fib(n, memo = {}) {
  if (n <= 1) {
    return n;
  }
  if (memo[n]) {
    return memo[n];
  }
  memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
  return memo[n];
}

要说哪种方法最优雅可能因人而异。迭代方法通常被认为是比较简洁和高效的实现方式,相对来说比较优雅。动态规划方法在处理较大的输入时效率更高,并且也具有一定的优雅性,因为它利用了记忆化的思想来优化计算。递归方法虽然直观,但由于效率问题,不太适合大规模计算。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容