【动态规划与递归】01 动态规划与递归

动态规划与递归

(先来一点看的迷迷糊糊的理论)

01 递归和动态规划不同:

相同:都能分解成若干子问题
不同:DP(动态规划)存储子问题结果

02 动态规划的四要素:

1、状态(存储小规模问题的结果)
2、方程(状态之间的联系,怎么通过晓得状态,来算大的状态)
3、初始化(最极限的小状态是什么)
4、答案(最大的那个状态是什么)
动态规划问题:多用于解决多重叠子问题的问题。

前面的01/02反正我是觉得对时间用处不大。 下面开始说点人话:

人话分析

01 什么是递归

递归算法,将一个大问题拆解成很对小问题,通过解决这些小问题而最终解决大问题的方法。
在C++中实现递归算法,常使用递归函数,就是说使用调用自身的函数。
递归程序的基本特征:它调用自身(参数的值更小),具有终止条件,可以直接计算其结果。

02 使用递归地注意事项( 动态规划是开发高效的递归算法实现的基本技术)

在使用递归程序时,我们需要考虑编程环境必须能够保持一个其大小与递归深度成正比例的下推栈。对于大型问题,这个栈需要的空间会很大,可能会妨碍我们使用递归的方法。
一个递归模型为分治法,最本质的特征就是:把一个问题分解成独立的子问题。如果子问题并不独立,问题就会复杂的多,主要原因是即使是这种最简单算法的直接递归实现,也可能需要难以想象的时间,使用动态规划技术就可以避免这个缺陷。

03 举例 Fiboncci Number(斐波那契数)

001 重述一下题目:

1,1,2,3,5,8,13…第n个数字等于n-1和n-2之和。这样一列数叫做斐波那契数
函数的作用就是求第n个数字的值。

002 递归自顶向下

众所周知第n个数字等于n-1和n-2之和,当n=1or2时 ,第n个裴波那契数都是1.
因此终止条件就是n== 1or n==2, 递归函数就是 F(n)=F(n-1)+F(n-2).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一个code杠精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值