Day 1
1、斐波那契数
方法一:
递归
f(n)=f(n-1)+f(n-2)
var fib = function(n) {
if(n<=1)
{
return n;
}
else{
return fib(n-1)+fib(n-2);
}
};
改进:用数组记录引进计算过的f(n),减小时间复杂度
/**
* @param {number} n
* @return {number}
*/
var arry=new Array(30).fill(0);
var fib = function(n) {
let a;
let b;
arry[0]=0;
arry[1]=1;
arry[2]=1;
if(n<3)
{
return arry[n];
}
if(arry[n-1])
{
a=arry[n-1];
}
else
{
a=fib[n-1]
}
if(arry[n-2])
{
b=arry[n-2];
}
else
{
b=fib[n-2]
}
arry[n]=a+b;
return arry[n];
};
方法二:
迭代,如果不用数组用变量(滑动数组)还可以减小空间复杂度
var arry=[];
var fib = function(n) {
if(n<=1)
{
return n;
}
else{
arry[0]=0;
arry[1]=1;
for(let i=2;i<=n;i++)
{
arry[i]=arry[i-1]+arry[i-2];
}
return arry[n];
}
};
2、第 N 个泰波那契数
和第一题差不多,只是变成了三个数