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

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

  1. php怎么控制递归多少次,关于一个PHP递归处理统计的问题

    json数据为: { "code": 0, "msg": "获取项目列表成功", "data": { "2&q ...

  2. 《程序员面试金典(第6版)》面试题 08.14. 布尔运算(动态规划,分治,递归,难度hard++)

    题目描述 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false).1 (true).& (AND). | (OR) 和 ^ (XOR) 符号组成.实现一个函数, ...

  3. 迭代和递归的应用例子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 ...

  4. 递归和迭代有什么区别?

    "递归"和"迭代"的区别如下: 1.递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把 ...

  5. 带你击杀动态规划梦魇-从暴力递归到动态规划

    本文章欢迎转载,但是转载请标明出处,程序锋子https://blog.csdn.net/l13591302862/article/details/111410091 想要分享下自己之前学习动态规划的过 ...

  6. java迭代和 递归的异同_Java中的递归和迭代之间有什么区别?

    该递归和迭代都重复执行的指令集.递归是指函数中的语句重复调用自身时的情况.该迭代是当循环重复执行,直到控制条件为假.递归和迭代之间的主要区别在于,递归是一个过程,始终应用于函数,而迭代则应用于我们要重 ...

  7. java递归怎么写_什么是递归?用Java写一个简单的递归程序

    什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决. 递归的要素 自定义递归函数,并确定函数的基本功能 ...

  8. ++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归

    0. 前言 大家好,我是多选参数的程序锅,一个正在 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.本篇将主要介绍递归相关的内容,下面是本篇的内容提纲. 1. 递归基础 ★ 争哥:从我 ...

  9. python数组分成两个和相等的子集_javascript,_动态规划——把一个整数数组分成两个和相等的子集,怎么写,javascript - phpStudy...

    动态规划--把一个整数数组分成两个和相等的子集,怎么写 当数组nums=[2,3,5]时,测试通过,但当nums=[5,3,2]时,测试就不能通过,这是为什么? window.onload = fun ...

最新文章

  1. 柳传志:我的忧虑来自人工智能的影响
  2. 面试:Java 到底是值传递还是引用传递?
  3. Lucene-Analyzer
  4. Android之循环执行次数のHandlerRunnable
  5. 【codeforces 798A】Mike and palindrome
  6. boost::fibers::numa::topology用法的测试程序
  7. delphi初级教程之delphi断点调试一
  8. 如意报表插件如何安装_Google Chrome浏览器如何安装插件应用
  9. Lync Server 2010标准版系列PART3:证书准备
  10. JAVA基础系列:Object类
  11. linux新系统配置网络,怎样配置新安装的Ubuntu版Linux系统的..._网络编辑_帮考网
  12. 二台S3928P堆叠的配置文档,大家可以参考
  13. centos6.9安装MySql可视化管理工具
  14. Photoshop CS5无法卸载或卸载不干净怎么办?
  15. 苹果M1 Mac 如何卸载 iPhone 和 iPad 应用程序?
  16. fMRI与MRI区别+名词解释+MRI中T1和T2的含义与区分
  17. 511遇见易语言注册调用乐玩插件类模块封装
  18. 小i机器人2019数博会C位秀肌肉 “认知智能”引领行业创新变革
  19. 学讲普通话水平测试软件,普通话智能学习软件
  20. ACL 2017 最佳长论文,带你创造一门优雅的新语言

热门文章

  1. SAP中的物料最小订购量
  2. Realsense D435i +Opencv 获取彩色、深度、IMU数据并对齐
  3. SQL语法分析-基础篇
  4. 手把手教你六类网线水晶头接法,超详细教程
  5. 报错 - 使用marked报错 marked__WEBPACK_IMPORTED_MODULE_4___default(...) is not a function
  6. 【产品】如何了解行业需求、痛点和发展机会
  7. 高校体育场地预约管理系统(Java Web毕业设计)
  8. Vue应用框架整合与实战--前端开发生态圈
  9. ERROR: [Synth 8-439] module ‘xxx‘ not found not found 错误解决办法
  10. SYSLOG与SNMP对比