斐波那切算法
规律如下
// 1==========1
// 1==========2
// 1,2========3
// 1,2,3======4
// 1,2,3,5====5
// 1,2,3,5,8==6
递归方式
时间复杂度O(2^n),空间复杂度O(n)
function fib(n) {
if (n < 2) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
尾递归(优化)
时间复杂度O(n),空间复杂度O(1)
function fib(n, a = 0, b = 1) {
if (n === 0) {
return a;
}
return fib(n - 1, b, a + b);
}
循环方式
时间复杂度O(n),空间复杂度O(1)
function fib(n) {
let a = 0;
let b = 1;
for (let i = 0; i < n; i++) {
let c = a + b;
a = b;
b = c;
}
return a;
}
动态规划
时间复杂度O(n),空间复杂度O(n)
function fib(n) {
let a = [];
a[0] = 0;
a[1] = 1;
for (let i = 2; i <= n; i++) {
a[i] = a[i - 1] + a[i - 2];
}
return a[n];
}