斐波那契数列
第一个数为0,第二个数为1,之后每个数都是前两个数之和
// 递归O(2^n)
function fibonacci(n){
if(n<=0) return 0
if(n===1) return 1
return fibonacci(n-1) + fibonacci(n-2)
}
优化
- 不用递归、用循环
- 记录中间结果
- 时间复杂度为O(n)
// O(n)
function fibonacci(n){
if(n<=0) return 0
if(n===1) return 1
let n1 = 1 // 记录n-1的结果
let n2 = 0 // 记录n-2的结果
let res = 0
for(let i =2 ;i<=n;i++){
res = n1+n2
// 记录中间结果
n2 = n1
n1 = res
}
return res
}
动态规划
- 用递归的思路分析问题,用循环来解决问题