这道题主要是递归和动态规划的应用
1.循环直接解法
function Fibonacci(n) {
if (n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
let a = 0,
b = 1;
for (let i = 2; i < n; ++i) {
let c = a + b;
a = b;
b = c;
}
return a + b;
}
2.普通递归 (算法是对的,但是牛客会报错,因为太慢了)
function Fibonacci(n) {
if(n<=1){
return n;
}
return Fibonacci(n-1) + Fibonacci(n-2);
}
(后来发现普通的递归多些几个if也能过,这样相当于降低了递归的层数)
3.动态规划
使用了备忘录的效果,把已经计算好的结果存储下来,在第二次计算时可以直接用之前计算的结果
function Fibonacci(n) {
const cache = {
0: 0,
1: 1
};
return myFibonacci(n);
function myFibonacci(n) {
if (cache[n] !== undefined) {
return cache[n];
}
cache[n] = myFibonacci(n - 1) + myFibonacci(n - 2);
return cache[n];
}
}