题目描述
leetcode链接:leetcode-cn.com/problems/fi…
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你 n ,请计算 F(n) 。
思路描述
算法中的经典题目了。 我想到两种解法,分别是递归法和动态规划。
递归法
很明显满足递归法的条件,在函数中存在调用函数本身的情况,且最后有终止条件。 优点代码少,易理解,但是效率低。
动态规划
递归法之所以效率低,是因为对函数的相同值重新计算了好几遍。而动态规划法则建议,与其对交叠的子问题一次又一次地求解,还不如对每个较小的子问题只求解一次并把结果记录在表中。 自底向上,根据较小值获取到较大值的值,同时将运算过的值存储起来,避免重复运算。效率较高。但是因为要存储运算过的值,所以占的空间会多一点。
AC代码
递归法:
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
if(n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
return fib(n-1) + fib(n-2)
};
动态规划:
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
if(n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
let a = 2;
let tempA = 0;
let tempB = 1;
while (a !== n+1) {
const temp = tempA + tempB;
tempA = tempB;
tempB = temp;
a++;
}
return tempB;
};
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情