Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >动态编程与递归有多大不同

动态编程与递归有多大不同
EN

Stack Overflow用户
提问于 2020-09-30 07:09:43
回答 1查看 29关注 0票数 0

我听说如果你能写一个递归代码,你就可以把它转换成一个动态编程代码,但是有什么必要这样做呢?以及如何将递归代码转换为DP?

EN

回答 1

Stack Overflow用户

发布于 2020-09-30 11:02:47

在动态编程中有两种方法,自上而下和自下而上。

让我们以斐波那契数列为例:

f(0) =0:x= 1,

f(1) =1:x= 1,

f(x) = f(x-1) + f(x-2):x>1

自上而下的方法:

它使用递归+记忆(存储计算的状态以避免重新计算):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int memo[1000];//initialized by zeroes

int f(int x) {
    if (x == 0 || x == 1) return 1;
    if (memo[x] != 0) return memo[x]; //trying to avoid recalculation
    memo[x] = f(x - 1) + f(x - 2); //storing the result
    return memo[x];
}

正如你在这里注意到的,为了计算f(x)的值,我们必须把它分解成f(x-1)和f(x-2),这就是为什么它被称为自上而下。

自下而上的方法:

它使用循环(for,while...)而不是递归,并将值存储在数组中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int memo[1000];

int bottom_up(int x) {
    memo[0] = 1;
    memo[1] = 1;
    for (int i = 2; i < 1000; i++)
        memo[i] = memo[i - 1] + memo[i - 2];
}

正如你注意到的,我们计算斐波那契数列的值,从小到大,这就是为什么它被称为自下而上。

将代码从递归转换为循环被认为是将递归代码转换为迭代代码。

递归代码将多次调用自身,您应该知道每个函数调用都将存储在内存堆栈中,因此最好使用迭代方法,因为它对内存和性能更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64132558

复制
相关文章
问题有多大,中台就有多大
大部分的商业行为都是为了解决现实问题,而大部分战略级决策的形成也都是基于这些问题的解决。在云市场,国内外巨头早年的筚路蓝缕,便多是着眼当下——这一点上,科技公司所取得的成就,在相当范围内都取决于曾经遇到的问题。
IT创事记
2022/06/24
1.1K0
问题有多大,中台就有多大
感官世界有多大 宇宙就有多大
雷锋网授权转载 网站: http://www.leiphone.com/ 微信: leiphone-sz 我们人类由非常小的细胞构成,生活在一个非常大的宇宙,但是,我们却不太善于理解现实中或微观或宏观
大数据文摘
2018/05/23
1.3K0
SSL延迟有多大?
据说,Netscape公司当年设计SSL协议的时候,有人提过,将互联网所有链接都变成HTTPs开头的加密链接。 这个建议没有得到采纳,原因之一是HTTPs链接比不加密的HTTP链接慢很多。(另一个原因
ruanyf
2018/04/13
2K0
SSL延迟有多大?
真实工作中的编程,与在校coder有哪些不同?
工作中的编程和学校里最大的不同在于:在完整的流程规范下,同事间协同开发,按时按量交付,并不断测试迭代优化,最终能稳定的用于生产。
朱卫军 AI Python
2023/02/23
4530
真实工作中的编程,与在校coder有哪些不同?
递归与动态规划---基础篇1
ps:最近几天正在刷一些有关动态规划的题,我会把自己学习时的想法以及做题的想法记录下来。(小白第一次写作,希望大家多多支持)
帅地
2018/08/30
7091
递归与动态规划---基础篇1
递归与动态规划----基础篇2
ps:最近几天正在刷一些有关动态规划的题,我会把自己学习时的想法以及做题的想法记录下来。如果你觉得对你有帮助,欢迎关注,谢谢。
帅地
2018/08/30
5100
递归与动态规划----基础篇2
CentOS 与 Ubuntu 有什么不同?
Linux 中的可选项似乎“无穷无尽”,因为每个人都可以通过修改一个已经发行的版本或者新的白手起家的版本 (LFS) 来构建 Linux。
Xcnte
2021/12/14
3.3K0
CentOS 与 Ubuntu 有什么不同?
java教程与其它编程教程相比学习难度有多大
java教程与其它编程教程相比学习难度有多大。程序员做为这几年来被人们谈笑最多的对象,也是情有可原的,他们的特点太过明显,当然能力也是看得见,并得到大家的认可。还有一些学生也看上了程序员这个专业,想要进入这个领域。那么程序员常用的C/C++、java、python到底哪一个更好学呢?java教程会不会更容易入门。
用户8739990
2021/07/09
3510
java教程与其它编程教程相比学习难度有多大
JavaScript 与 Java 有什么不同?
写这篇文章是因为在知乎上看到有人问这个问题,在想怎么会有这种奇葩问题,不过想想当初刚刚接触编程的我貌似也搞不清两者的关系,认知还是需要一个过程。 然后看到比较经典的回答有:Java 和Javascri
三哥
2018/06/15
9990
编程语言Zig有什么与众不同的
编程语言专家曾对 Zig 编程语言的创造者 Andrew Kelley 说,在编译时运行代码是个蠢主意。尽管如此,Kelley 还是去实现了这个想法,而多年以后,这个蠢主意已经成为了 Zig 的招牌。这一特征在 Zig 中用关键字 comptime 标识,代表需要在编译时运行的代码或者是需要的变量。Zig 可以在编译时运行代码的能力让开发者们可以在不明确任何泛型或模板支撑的情况下,编写通用代码或是进行元编程。让我们来通过代码例子更直观地了解编译时运行是什么意思,以及其为什么重要。以这段简单的函数为例,在 a 和 b 两个数之间取最大值。不使用泛型或 comptime 代码的话,我们就需要将这个函数的具体变量类型写死,比如这里用的 Zig 中 32 位整数 i32 。
深度学习与Python
2022/11/28
3.5K0
编程语言Zig有什么与众不同的
@Autowired 与 @Resource 有何不同
@Autowired来自于 spring-beans 模块;而@Resource则来自于 jakarta.annotation-api 模块,它是 Jakarta EE 规范中的内容。虽然 @Autowired 与 @Resource 均用于实现依赖注入,但 Spring 对二者的处理逻辑是不一样的。
程序猿杜小头
2023/03/05
6800
@Autowired 与 @Resource 有何不同
CentOS 与 Ubuntu 有什么不同?
豌豆贴心提醒,本文阅读时间5分钟 Linux 中的可选项似乎“无穷无尽”,因为每个人都可以通过修改一个已经发行的版本或者新的白手起家的版本(LFS) 来构建 Linux。 关于 Linux 发行版的选择,我们关注的因素包括用户界面、文件系统、软件包分发、新的特性以及更新周期和可维护性等。 在这篇文章中,我们会讲到两个较为熟知的 Linux 发行版,实际上,更多的是介绍两者之间的不同,以及在哪些方面一方比另一方更好。 什么是 CentOS? CentOS(Community Enterprise Op
小小科
2018/05/03
2.5K0
CentOS 与 Ubuntu 有什么不同?
SRE与DevOps有什么不同?
SRE和DevOps有什么区别?您可能会说这很大程度上是语义问题,实际上,SRE和DevOps工程师扮演着相同的基本角色。
后场技术
2020/09/03
2.3K0
SRE与DevOps有什么不同?
分析师有多大胆,智能网卡市场有多大产!
Gartner从来不走寻常路,将智能网卡称为Function Acceleratior Cards(FAC)。
用户6874558
2023/02/15
9150
分析师有多大胆,智能网卡市场有多大产!
递归编程
递归编程是一种强大的编程技术,可以极大地简化一些编程任务或者完成一些其他方式无法完成的任务。顾名思义,递归编程就是程序自己调用自己,在调用过程中传入参数的修改值。通常,递归编程包含至少两个过程:设置初始状态并对递归过程进行初始调用的过程;递归过程本身调用一次或多次。
fanjy
2021/09/01
8010
看动画轻松理解「递归」与「动态规划」
在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点。
五分钟学算法
2019/01/02
8910
通知:端午有“礼”与粽不同
“五月五,是端阳,吃粽子,龙船比赛喜洋洋。”首先阿D预祝大家端午节愉快,端午假期放假安排如下: 2014年6月2日,共1天;6月3日正常上班。 端午放假期间,为了保证DNSPod各项服务的正常与稳定,阿D安排了值班人员。有关解析问题请大家【提交工单】或致电:400-111-1234,提交问题让值班人员为您处理。 注:端午放假期间,由于值班人员有限,阿D可能会出现不能及时接听您的电话或回复您的消息的情况。但请您放心,值班人员会在最短的时间内回复您的问题,由此给您造成的不便,敬请您的谅解。
腾讯云DNSPod团队
2023/05/04
2700
通知:端午有“礼”与粽不同
看动画轻松理解「递归」与「动态规划」
在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知识点。
崔庆才
2019/09/04
6300
看动画轻松理解「递归」与「动态规划」
同步与异步 Python 有何不同?
你是否听人们说过,异步 Python 代码比“普通(或同步)Python 代码更快?果真是那样吗?
Python猫
2020/10/23
1.2K0
同步与异步 Python 有何不同?
2016倒闭的“互联网+”名单 | 人有多大胆,地有多大产
而现在的很多创业者又何尝不是如此?大家哪里是在创业,都是玩空手套白狼,都是在讲故事,描述自己的未来,你描述的越好,估值越高。这不是浮夸风是什么?
IT阅读排行榜
2018/08/16
1.2K0
2016倒闭的“互联网+”名单 | 人有多大胆,地有多大产

相似问题

异步编程与线程有多大的不同?

31

递归编程调用与动态编程调用

48

变量与引用有多大不同?

23

javascript中的递归有多大限制?

30

web编程与后端编程有什么不同?

129
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文