斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式:F(n)=F(n-1)+F(n-2)
即每一项都等于前两项之和
以下介绍了两种方法:递归和循环
/**
* 斐波那契数列,求第N个数
*/
// 递归
function f2(N){
if(N == 1 || N == 2){
return 1;
}else{
return f(N-1)+f(N-2);
}
}
// 循环
function f2(N){
var N1 = 1;
var N2 = 1;
var next;
for(var i=3;i<=N;i++){
next = N1 + N2;
N1 = N2;
N2 = next;
}
return next;
}
console.log(f1(6))
console.log(f2(6))
递归:
此种方法的缺陷:重复计算的次数太多,效率低
时间复杂度:O(2^N)
空间复杂度:O(N)
循环:
时间复杂度:O(N)
空间复杂度:O(1)(创建了四个对象,是常数,所以可忽略不计)
此种方法是"最优方法"
优点:时间复杂度和空间复杂度最低,而且可读性高