【前端】自学基础算法 -- 22.动态规划-斐波那契数列

动态规划-斐波那契数列

简介

动态规划(Dynamic Programming,简称 DP)是一种解决复杂问题的方法,它将问题分解为更小、更简单的子问题,并存储这些子问题的解,以避免重复计算。动态规划通常用于优化问题,如求最大值、最小值或计数问题。

动态规划的基本思想是将大问题分解为小问题,并从小问题开始解决,逐步构建到原问题的解。具体步骤如下:

  1. 定义状态:明确问题的解是什么,并定义状态变量。
  2. 建立状态转移方程:根据问题的性质,建立状态之间的递推关系。
  3. 初始化状态:确定初始状态或边界条件。
  4. 计算顺序:确定计算顺序,通常是从边界条件开始,逐步计算到最终状态。
  5. 返回结果:根据计算结果返回最终答案。

斐波那契数列:从第三项开始,每一项都是前两项之和

实现方法

/**
 * 动态规划 - 斐波那契数列
 * 从第三项开始,每一项都是前两项之和
 * 值: 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值