function fib(n) {
if ( n <= 1 ) {return 1};
return fib(n - 1) + fib(n - 2);
}
时间复杂度为 O(2^n),空间复杂度取决于栈的深度
2. 使用动态规划实现
function fib(n) {
if (Number.isInteger(n) === true) {
let a = [];
if (n <= 0) {
return -1;
} else {
a[0] = a[1] = 1;
a[2] = 2;
for (let i = 3; i < n + 1; i++) {
a[i] = a[i - 1] + a[i - 2];
}
}
return a[n];
}
}
时间复杂度为 O(n),空间复杂度为 O(n)
3. 使用两个变量实现
function fib(n) {
if (Number.isInteger(n) === true) {
let a, b, c;
if (n <= 0) {
return -1;
} else {
a = b = 1;
for (let i = 3; i < n + 1; i++) {
c = a + b;
a = b;
b = c;
}
}
return c;
}
}