递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)
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.总结:递归结构更容易理解,动态规划加入了记录表,相当于是利用空间换时间的做法。
递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)相关推荐
- php怎么控制递归多少次,关于一个PHP递归处理统计的问题
json数据为: { "code": 0, "msg": "获取项目列表成功", "data": { "2&q ...
- 《程序员面试金典(第6版)》面试题 08.14. 布尔运算(动态规划,分治,递归,难度hard++)
题目描述 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false).1 (true).& (AND). | (OR) 和 ^ (XOR) 符号组成.实现一个函数, ...
- 迭代和递归的应用例子c语言,递归和迭代的应用以及区别
斐波那契数列: 1 1 2 3 5 8 13 21 34 55 - fb(n) : 1 n <= 2 fb(n-1) + fb(n-2) n > 2 int fb(n) { if(n &l ...
- 递归和迭代有什么区别?
"递归"和"迭代"的区别如下: 1.递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把 ...
- 带你击杀动态规划梦魇-从暴力递归到动态规划
本文章欢迎转载,但是转载请标明出处,程序锋子https://blog.csdn.net/l13591302862/article/details/111410091 想要分享下自己之前学习动态规划的过 ...
- java迭代和 递归的异同_Java中的递归和迭代之间有什么区别?
该递归和迭代都重复执行的指令集.递归是指函数中的语句重复调用自身时的情况.该迭代是当循环重复执行,直到控制条件为假.递归和迭代之间的主要区别在于,递归是一个过程,始终应用于函数,而迭代则应用于我们要重 ...
- java递归怎么写_什么是递归?用Java写一个简单的递归程序
什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决. 递归的要素 自定义递归函数,并确定函数的基本功能 ...
- ++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归
0. 前言 大家好,我是多选参数的程序锅,一个正在 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.本篇将主要介绍递归相关的内容,下面是本篇的内容提纲. 1. 递归基础 ★ 争哥:从我 ...
- python数组分成两个和相等的子集_javascript,_动态规划——把一个整数数组分成两个和相等的子集,怎么写,javascript - phpStudy...
动态规划--把一个整数数组分成两个和相等的子集,怎么写 当数组nums=[2,3,5]时,测试通过,但当nums=[5,3,2]时,测试就不能通过,这是为什么? window.onload = fun ...
最新文章
- 柳传志:我的忧虑来自人工智能的影响
- 面试:Java 到底是值传递还是引用传递?
- Lucene-Analyzer
- Android之循环执行次数のHandlerRunnable
- 【codeforces 798A】Mike and palindrome
- boost::fibers::numa::topology用法的测试程序
- delphi初级教程之delphi断点调试一
- 如意报表插件如何安装_Google Chrome浏览器如何安装插件应用
- Lync Server 2010标准版系列PART3:证书准备
- JAVA基础系列:Object类
- linux新系统配置网络,怎样配置新安装的Ubuntu版Linux系统的..._网络编辑_帮考网
- 二台S3928P堆叠的配置文档,大家可以参考
- centos6.9安装MySql可视化管理工具
- Photoshop CS5无法卸载或卸载不干净怎么办?
- 苹果M1 Mac 如何卸载 iPhone 和 iPad 应用程序?
- fMRI与MRI区别+名词解释+MRI中T1和T2的含义与区分
- 511遇见易语言注册调用乐玩插件类模块封装
- 小i机器人2019数博会C位秀肌肉 “认知智能”引领行业创新变革
- 学讲普通话水平测试软件,普通话智能学习软件
- ACL 2017 最佳长论文,带你创造一门优雅的新语言
热门文章
- SAP中的物料最小订购量
- Realsense D435i +Opencv 获取彩色、深度、IMU数据并对齐
- SQL语法分析-基础篇
- 手把手教你六类网线水晶头接法,超详细教程
- 报错 - 使用marked报错 marked__WEBPACK_IMPORTED_MODULE_4___default(...) is not a function
- 【产品】如何了解行业需求、痛点和发展机会
- 高校体育场地预约管理系统(Java Web毕业设计)
- Vue应用框架整合与实战--前端开发生态圈
- ERROR: [Synth 8-439] module ‘xxx‘ not found not found 错误解决办法
- SYSLOG与SNMP对比