递归/动态规划/迭代/贪心

Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心 1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(Iterative Method) 无法使用公式一次求解,而需要使用重复结构(即循环)重复执行一段代码来得到答案。4、递归调用是一个方法在其方法体内调用其自身方法。5、递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推导而得到结果。 阅读详情

基本概念

递归:程序调用自身的编程技巧称为递归,是函数自己调用自己。
  一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量。递归的能力在于用有限的语句来定义对象的无限集合。

使用递归要注意的有两点:
1)递归就是在过程或函数里面调用自身
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口

递归分为两个阶段:
1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解
2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解

由于递归引起一系列的函数调用;并且有可能会有一系列的重复计算,递归算法的执行效率相对较低。

迭代:利用变量的原值推算出变量的一个新值。如果递归是自己调用自己的话,迭代就是A不停的调用B。

  采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。

定义优点缺点
递归程序调用自身的编程技巧称为递归1)大问题化为小问题,可以极大的减少代码量 2)用有限的语句来定义对象的无限集合 3)代码更简洁清晰,可读性更好1)递归调用函数,浪费空间 2)递归太深容易造成堆栈溢出
迭代利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B1)迭代效率高,运行时间只因循环次数增加而增加 2)没什么额外开销,空间上也没有什么增加1) 不容易理解 2) 代码不如递归简洁 3) 编写复杂问题时困难

二者关系
1) 递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换
2) 能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出

————————————————————————————————————
递归和动态规划的一个区别(递归是自顶向下,然后返回计算;动态规划是自低向上运算)。递归结构更容易理解,动态规划加入了记录表,相当于是利用空间换时间的做法。

贪心算法和动态规划的区别

  1. 贪心:每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留。动态规划:全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解。动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解
  2. 贪心:如果把所有的子问题看成一棵树的话,贪心从根出发,每次向下遍历最优子树即可(通常这个“最优”都是基于当前情况下显而易见的“最优”);这样的话,就不需要知道一个节点的所有子树情况,于是构不成一棵完整的树。动态规划:动态规划则自底向上,从叶子向根,构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,最后得到一棵完整的树,并且最终选择其中的最优值作为自身的值,得到答案
  3. 贪心不能保证求得的最后解是最佳的,一般复杂度低;而动态规划本质是穷举法,可以保证结果是最佳的,复杂度高
五大常用算法-动态规划,分治,递归,贪心,回溯 立即下载

相关推荐

CSM中一些常见问题的解决方式

CSM中一些常见问题的解决方式 抖动 摄像机在每帧移动或者旋转时,会产生较严重的抖动问题。

小龙虾的博客 2130

算法 递归、迭代、动态规划的区别与联系

递归: 程序调用自身,从顶部将问题分解,通过解决掉所有分解出来的小问题,来解决整个问题。 即:有顶到底,由大到小,逐层分解 迭代: 利用变量的原值推算出变量的一个新值。递归中一定有迭代,但是迭代中不一定有递归。 动态规划: 通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。 即:有底到顶,由小到大,以点到面

m0_56208280的博客 965

React项目实战:用AntV G6打造可折叠组织架构图(附完整代码)

本文详细介绍了如何在React项目中使用AntV G6库构建一个功能完整的可折叠组织架构图。通过实战代码演示了从环境搭建、自定义节点、折叠状态管理到性能优化的全流程,重点解决了企业级应用中处理复杂树形数据、实现流畅交互等核心问题,并提供了可直接复用的组件代码。

weixin_29016315的博客 312

递归、迭代、动态规划的区别与联系

一、定义 递归:程序调用自身,从顶部将问题分解,通过解决掉所有分解出来的小问题,来解决整个问题。 迭代:利用变量的原值推算出变量的一个新值。递归中一定有迭代,但是迭代中不一定有递归。 动态规划:通常与递归相反,其从底部开始解决问题。将所有小问题解决掉,进而解决的整个问题。 下面通过斐波那契数列相关代码来比较一下三者。 斐波那契数列:1,1,2,3,5,8,11,13… 二、递归 自上而下调用函数本...

qq_30534935的博客 4507

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2113

ros2笔记-4.6使用launch启动脚本

ros2 4.6 使用launch启动多节点

bohu83的博客 1311

Java 二叉树完整代码(递归&迭代)

Java 二叉树完整代码(递归&迭代)

爱干饭的猿的博客 2562

Veristand simulink 集成 simulink 非正版如何处理

1、安装 veristand model Generation Support add-on。matlab 安装veristand model support 记录。下载 以后 如果非正版matlab 直接拖命令行执行。下载后直接命令行执行即可。

flik9527的博客 598

算法导论 总结索引 | 第四部分 第十六章:贪心算法

活动选择问题:最优子结构,贪心选择,递归贪心算法,迭代贪心算法;贪心算法原理:贪心选择性质,最优子结构,贪心对动态规划;赫夫曼编码:前缀码,构造赫夫曼编码:前缀码,构造赫夫曼编码,赫夫曼编码的正确性

AsherGu的博客 1312

Burpsuite 使用教程

Burpsuite 使用教程

xiongIT的博客 8207

硅电容的工艺结构原理及选型参数总结

硅电容,也称为硅质电容或硅二极管电容,是一种特殊的电容器。它利用硅二极管的结构来实现电容的功能。本文对硅电容的工作原理,结构特点,选型参数及设计注意事项进行总结。

fydar的博客 2332

【leetcode】分治/动态规划/贪心/递归/迭代

算法策略 分治:自顶向下,分而治之。常用递归。 动态规划(DP):类似于分治,但会存储每个子问题的解,避免重复计算。常用迭代。 贪心:类似于DP,但每步都求局部最优。计算次数往往会比DP少。凡是用贪心能解决的,DP都能解决。 实现手段 递归:A调用A自身。所有的递归都可以转化成迭代。 迭代:A循环调用B,并不断更新变量的旧值。 ...

JNing 645

具身智能(40):主流 VLA 模型π₀

摘要: π₀是首款专为机器人设计的VLA(视觉-语言-动作)端到端基础模型,通过双阶段训练实现“感知-决策-执行”闭环。其创新点包括:1)FlowMatching技术实现连续平滑动作控制(精度0.3°);2)结合VLM预训练与多机器人实操数据,零样本任务完成率达76.4%,远超同类模型;3)支持模糊指令理解与动态场景适应(如遮挡识别)。开源版本涵盖不同规模模型,适用于工业装配、服务机器人等场景,在延迟(213ms)和稳定性(92%自主恢复率)上显著领先OpenVLA等竞品。

码农17年的博客 510

循环/迭代/递推/回溯/递归----分治/动态规划/贪心

循环:不断重复进行某一运算、操作。 示例:for 循环 递推:从初值出发反复进行某一运算得到所需结果。-----从已知到未知,从小到达(比如每年长高9cm,20年180,30后270) 迭代:不断对前一旧值运算得到新值直到达到精度。一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 例如不断按照梯度下降的方向迭代求出未知参数 递归:从所需结果出发不断回溯前一运算直到回到初值再递推得到所需结果----从未知到已知,从大到小,再从小到大(你想进.

weixin_36378508的博客 1135

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【算法导论】学习笔记——第16章 贪心算法

贪心算法是使做出的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解。其实,这个定义旨在说明贪心算法必须伴随做出最优选择,如moving table,我们选择最大重叠数等等。当然,很多情况下,并不一定局部最优解就是全局最优解。与DP类似,很多贪心算法设计时都很容易想到递归的形式,然而由于深度太深,很容易stack overflow。因此,这时候,大多我们都需要将递归变为递推。...

weixin_33758863的博客 175

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

保姆级教程:用Python搞定PTA L3-035完美树(树形DP+贪心优化)

本文详细介绍了如何使用Python结合树形DP和贪心算法解决PTA L3-035完美树问题。通过自底向上的递归DP框架和优先队列优化,实现最小代价调整节点颜色的目标,适合算法竞赛和工程实践。文章包含完整代码实现、测试用例及性能优化建议。

weixin_42524824的博客 243

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

力扣新手避坑指南:从两数之和到动态规划的 3 个常见思维误区与解法对比

本文为力扣新手提供了从两数之和到动态规划的3个常见思维误区与解法对比,帮助读者避免常见错误并掌握高效算法。文章详细解析了暴力枚举与哈希表的抉择、递归陷阱与动态规划的破局方法,以及贪心算法的适用条件,适合正在刷题的算法学习者提升解题效率。

weixin_26905487的博客 238

算法基础与分析方法全面详细指南

本文系统介绍了算法基础与分析方法的核心知识,包括算法定义、特性、发展历史和复杂度分析理论。重点讲解了大O表示法、时间/空间复杂度计算规则,以及迭代、递归、分治等常见算法类型的性能分析。通过具体代码示例展示了不同算法的时间复杂度差异,并提供了优化策略,帮助读者建立算法评估与优化的系统方法论。

独坐一隅,凝神遐想,是种幸福! —— 独隅 950

华为机试pyhon版

示例2:二维数组遍历(矩阵) 二、哈希表(字典 / Counter) 三、栈 Stack(机考重点:火车进站问题) 火车进站问题(经典机考题) 题目:火车按顺序进站,可随时出站,判断输出序列是否合法。 输入:进站序列,出站序列,判断是否可行。 四、双指针(快慢指针、左右指针) 1)左右双指针:有序数组两数之和 2)快慢指针:删除数组重复元素 五、字符串处理(机考高频) 题型:统计字符次数、密码校验、字符串排序、查找子串 六、递归 & 迭代 递归:求n的阶乘 七、二叉树(机考重难点) 二叉树节

qq_40844444的博客 46

13大算法思想,带你初窥门径

算法思想是解决问题的底层逻辑,不同思想并非孤立,常结合使用(如分治+动态规划、贪心+回溯)。掌握这些思想的关键是理解其核心逻辑、适用场景,并通过练习经典问题(如LeetCode)深化应用能力。实际编程中,需根据问题特性选择或组合算法思想,以达到效率与实现复杂度的平衡。

qq_51145696的博客 605

JAVA算法

**时间复杂度**:衡量算法执行时间随数据规模的增长趋势,常见有O(1)、O(n)、O(n²)等。- **图算法**:DFS(深度优先)、BFS(广度优先),用于路径搜索。- **动态规划(DP)**:解决重叠子问题(如背包问题、斐波那契数列)。- **二分查找**(O(log n),要求有序数组)- **快速排序**(O(n log n),不稳定)- **归并排序**(O(n log n),稳定)- **堆排序**(O(n log n),不稳定)- **哈希查找**(O(1),依赖哈希函数)

2403_88329066的博客 254

算法面试突击:从插入排序到红黑树,这些高频考点你掌握了吗?

本文为算法面试提供高效突击指南,聚焦从插入排序到红黑树等高频考点。通过剖析核心算法思想、提炼解题模板与复杂度分析,帮助求职者系统复习并掌握关键数据结构与算法设计,从容应对技术面试挑战。

xray4的博客 607

【数据结构与算法_学习精华】

1、核心结论:种种数据结构,皆为顺序存储)和链式存储)的变换。(索引访问与指针)数据结构的关键点在于,具体一点就是:增删查改等基本操作。种种算法,皆为。穷举的关键点在于无遗漏无冗余各种数据结构的遍历 + 访问仅两种形式:迭代(for / while)与递归(函数自调:自己调用自己)

weixin_42333261的博客 776

数组、链表以及字符串常见解题思路

数组、链表以及字符串常见解题思路 数组 常见思路:排序、二分(单调数组查找的情况)、模拟、下标法(鸽笼)(看一看nums[i]的范围,如果很小就可以使用鸽笼)、前缀和(经常和单调栈一起出,解决最长最短子数组之类的问题)、双指针、滑动窗口(满足条件的子数组长度)、贪心(还是和子数组长度有很大关系)、合并区间问题 其中最重要的就是二分法(双指针?) 鸽笼法会和前缀和混在一起 用来找比自己小的元素的个数(注意nums[i]的范围) 合并区间问题(基本上都要排序,还有一个就是类似会议室的那种) 数组的贪心问

weixin_43969625的博客 1348

编译器优化秘籍:提升代码性能的10个终极算法技巧

GitHub 加速计划 / alg / algo 项目提供了数据结构和算法必知必会的50个代码实现,本文将深入探讨如何通过这些算法实现来优化编译器性能,帮助开发者编写更高效的代码。 ## 1. 选择高效排序算法:归并排序与快速排序的应用 排序是编译器优化中常见的操作,选择合适的排序算法能显著提升性能。归并排序和快速排序是两种常用的线性对数时间复杂度排序算法。 归并排序使用分治思想,将数组分成

gitblog_00734的博客 431

【算法导论】贪心算法之背包问题

在讨论贪心算法时,我们先了解贪心算法与动态规划之间的区别与联系,后面我们将发现可以用0、1背包问题和部分背包问题来比较贪心算法和动态规划的关系。 我们知道,对于一个最优解问题,贪心算法不一定能够产生一个最优解。因为,如果想要采用贪心算法得到最优解需要满足两个条件:贪心选择性质、最优子结构。 贪心选择性质:一个全局最优解可以通过局部最优解来得到。that is to say,当考虑如何做选择时,

青峰碧陋室 9063
上一篇: HashMap疑难杂问
下一篇: 线程/进程通信方式
K. Bob
博客等级 码龄8年 82粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值