动态规划你学会了吗?

本文介绍了动态规划的概念,并通过斐波那契数列的例子,详细阐述了如何使用动态规划避免重复计算,优化递归解法。动态规划通过将问题分解为阶段,利用状态转移矩阵逐步求解,从而提高效率。文章以简洁的代码展示了动态规划的实现,并预告了接下来将探讨0、1背包问题以深入理解这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态规划一直被认为是最难理解的一种算法思想,什么重叠子问题、动态转移方程、最优子结构等等,一听就高深莫测,没有往下学习下去的动力。接下了我会更新一系列的文章来把动态规划这个算法思想尽量去讲明白,希望对你在以后的学习生活中提供一些帮助。没有关注的同学先点个关注吧。

一、初识动态规划

废话不多说,我们直接先上一个经典的例子。那就是耳熟能详的斐波那契数列问题。我们先来看一下问题的定义。

斐波那契数列的定义如下:   
斐波那契数列指的是这样一个数列 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,.....  
它以递归的方法来定义:  
F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
复制代码
  1. 递归解决:

这个例子最直观的方法就是用递归的方式来实现,毕竟斐波那契数列是用递归来定义的。我们来看一下代码实现。

def fibs(n):
     if n<2:
          return n
     return fibs(n-1)+fibs(n-2)
     
复制代码

这样是不是很简单。我们接下来看一下调用的递归树。我们以fibs(6)为例。

动态规划你学会了吗?

其中每个结点表示要计算的斐波那契数列的第几项,我们可以从上图发现,会出现许多重复计算的问题,比如fib(4)就计算了两次。这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值