递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)

 

 

1看到介绍递归比较好的文章,链接如下:

https://blog.csdn.net/sinat_38052999/article/details/73303111

参考自:https://www.docin.com/p-1126738649.html和左程云算法

递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)

典型举例:佩波纳契数列

递归方式的时候,这里存在重复计算:比如需要f(5)

f(5)=f(4)+f(3)

f(4)=f(3)+f(2)

f(3)=f(2)+f(1)

然后返回去计算出结果,

题目已知f(1)=1,f(2)=1.那么根据上边f(3)=f(1)+f(2)=2.

同理:f(4)=f(3)+f(2)=[f(1)+f(2)]+f(2)=3

f(5)=f(4)+f(3)=[f(3)+f(2)]+[f(2)+f(1)]={[f(1)+f(2)]+f(2)}+[f(2)+f(1)]=5

这里就重复计算了f(3)和f(4)。

动态规划方式的区别,比如需要f(4),首先找一个数组或者变量。这里使用一个变量。temp

我们已知f(1)=1,f(2)=2.那么根据定义:f(3)=f(1)+f(2)=2,

使用一个temp记录下这个f(3)值。

计算f(4)=f(3)+f(2)=temp+f(2)=3.

这里为什么需要记录f(3)的值,不用记录f(1)和f(2),——————题目已知f(1)=1,f(2)=2.如果没有记录f(3),那么只是计算了,但是结果没有保存。入果还要计算f(5),就需要记录f(4)和f(3)的结果。

实际上就是用空间换取时间。

 

 

 

 

1.递归方式:

复杂度:

这里存在重复计算:比如需要f(4)

f(4)=f(3)+f(2)

f(3)=f(2)+f(1)

然后返回去计算出结果,这里就重复利用了f(2)。

2.动态规划算法:

自底向上:

时间复杂度是n

改进一点:以下方式只是算出第n项,同时每次只是记忆前面两项。空间比上面方式更省。

 

 

3.总结:递归结构更容易理解,动态规划加入了记录表,相当于是利用空间换时间的做法。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值