// 暴力递归-斐波那契
function fb(n) {
if (n < 2) return n
return fb(n - 1) + fb(n - 2)
}
console.log(fb(2));
//动态规划法-斐波那契
function fb(n) {
if (n < 2) return n
const store = new Array(n).fill(0)
store[0] = 1
store[1] = 1
for (let i = 2; i < n; i++) {
store[i] = store[i - 1] + store[i - 2]
}
return store[n - 1]
}
console.log(fb(100));
//动态规划法相当于对 store[100] = store[99]+store[98]......+store[1] 求和
//而普通的递归相当于对1-100的每一个值都执行了一遍上述的操作
//动态规划法-不同路径问题
function path(x, y) {
const store = new Array(x).fill(new Array(y).fill(0))
store[0][0] = 0
store[0][1] = 1
store[1][0] = 1
for (let i = 1; i < x; i++) {
for (let j = 1; j < y; j++) {
store[i][j] = store[i - 1][j] + store[i][j - 1]
}
}
return store[x - 1][y - 1]
}
console.log(path(7, 3));
//******动态规划法核心思想******
//1.建立状态转移方程
//2.缓存并复用以往结果
//3.按顺序从小往大算