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