先介绍一下斐波那契这个经典算法题吧:
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
1. 递归
递归就是自己调用自己,时间和空间都耗用较多,大部分的刷题网站在斐波那契这个题目时都不支持用递归
var fib = function(n) {
if(n<2) return n
return fib(n-1)+fib(n-2)
};
2. 动态规划
动态规划可以理解成青蛙跳台阶,不管每一步跳多少个,最终的目的地台阶是一样的,只不过过程可能有多种,本质就是空间换时间 可以看到下面的方法是耗用了长度为n+1的数组的空间
function fib(n){
var arr=[0,1]
for(let i=2;i<=n;i++){
arr[i]=arr[i-1]+arr[i-2]
}
return arr[n]
}
3. 迭代
迭代就是不断用变量的旧值递推出新值的过程,简单来说变量还是那个变量,就是值在不断的变化,理解平时项目中的迭代,还是那个项目,功能却在不断的改变和完善,越来越接近最终的要求。可以看到下面的方法就是通过不断的改变 first、second和sum的值。
var fib = function(n) {
if(n<=1) return n;
var first=0,second=1;
for(var i=2;i<=n;i++){
var sum = first+second
first=second;
second=sum;
}
return sum;
};