动态规划-斐波那契数列
简介
动态规划(Dynamic Programming,简称 DP)是一种解决复杂问题的方法,它将问题分解为更小、更简单的子问题,并存储这些子问题的解,以避免重复计算。动态规划通常用于优化问题,如求最大值、最小值或计数问题。
动态规划的基本思想是将大问题分解为小问题,并从小问题开始解决,逐步构建到原问题的解。具体步骤如下:
- 定义状态:明确问题的解是什么,并定义状态变量。
- 建立状态转移方程:根据问题的性质,建立状态之间的递推关系。
- 初始化状态:确定初始状态或边界条件。
- 计算顺序:确定计算顺序,通常是从边界条件开始,逐步计算到最终状态。
- 返回结果:根据计算结果返回最终答案。
斐波那契数列:从第三项开始,每一项都是前两项之和
实现方法
/**
* 动态规划 - 斐波那契数列
* 从第三项开始,每一项都是前两项之和
* 值: 0 1 1 2 3 5 8 13 21 34 55 89...
* 位: 1 2 3 4 5 6 7 8 9 10 11 12...
*/
// 普通函数
function fibonacci(n) {
if (n <= 0) return -1
if (n === 1) return 0
if (n === 2) return 1
let a = 0,
b = 1,
c
for (let i = 3; i <= n; i++) {
c = a + b
a = b
b = c
}
return c
}
console.log(fibonacci(12))
/**
* 动态规划 - 斐波那契数列
* f(n) = f(n-1) + f(n-2)
*/
function fibonacci2(n) {
if (n <= 0) return -1
if (n === 1) return 0
if (n === 2) return 1
return fibonacci2(n - 1) + fibonacci2(n - 2)
}
console.log(fibonacci2(12))