每日刷题第1天 2021.12.26
509.斐波那契数
递归解法简单题
分析:
- 斐波那契数,通常用
F(n)表示,形成的序列称为 斐波那契数列 。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。 - 由上述👆可知,函数的停止条件是
f(0) = 0,f(1) = 1,那么就可以使用递归。 - 递归:在一个函数中再次调用该函数自身的行为。
递归解法:
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
// 使用递归做法
function fn (n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
return fn(n - 1) + fn(n - 2);
}
return fn(n);
};
优化递归解法:
- 在斐波那契数列中,如果
f(n)的n是一定的,无论多少次调用都会得到同样的结果。优化:计算一次后,用数列将结果存储起来。
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
// 定义数组进行缓存已经计算过的f(n)的值
let memo = new Array(33).fill(0);
// 使用递归做法
function fn (n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
// 判断之前是否计算过f(n)
if (memo[n] != 0) {
return memo[n];
}
return memo[n] = fn(n - 1) + fn(n - 2);
}
return fn(n);
};
总结
- 数组的
fill()方法:用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。
const array1 = [1, 2, 3, 4];
// fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
// fill with 5 from position 1
console.log(array1.fill(5, 1));
// expected output: [1, 5, 5, 5]
console.log(array1.fill(6));
// expected output: [6, 6, 6, 6]
附录
- 加油💪