迭代与递归的区别「建议收藏」

迭代与递归的区别「建议收藏」迭代和递归的区别:从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二者进行把握。递归:重复调用函数自身实现循环称为递归;    递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆…

大家好,又见面了,我是你们的朋友全栈君。

迭代和递归的区别:

从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二者进行把握。

  • 递归:重复调用函数自身实现循环称为递归;

       递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机。

         例如:if else 调用自己,并在合适时机退出

 

  • 迭代:利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;

        迭代大部分时候需要人为的对问题进行剖析,分析问题的规律所在,将问题转变为一次次的迭代来逼近答案。迭代不像递归那样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计时,比如图表、二叉树、网格等问题时,使用就比较困难,而是用递归就能省掉人工思考解法的过程,只需要不断的将问题分解直到返回就可以了。

         例如:for,while循环

  • 两者关系:所有的迭代可以转换为递归,但递归不一定可以转换成迭代。

 总结如下:

  定义 优点 缺点
递归 重复调用函数自身实现循环

a.用有限的循环语句实现无限集合;

b.代码易读;

c.大问题转化成小问题,减少了代码量。

a.递归不断调用函数,浪费空间

b.容易造成堆栈溢出

迭代

利用变量的原值推出新值;

函数内某段代码实现循环。

a.效率高,运行时间只随循环的增加而增加;

b.无额外开销。

a.代码难理解;

b.代码不如递归代码简洁;

c.编写复杂问题时,代码逻辑不易想出

两者关系

a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。

b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134956.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Excel文件解密软件

    Excel文件解密软件激活成功教程Excel文件的打开密码、也可以在不知道密码的情况下撤销工作表保护、编辑限制解密软件:okfoneEXCEL解密大师链接使用教程:打开软件,点击进入【找回密码】开始进行激活成功教程打开密码,把Excel文件添加到软件中,选择一个找回方法,点击【开始】就可以开始激活成功教程打开密码了点击进入【解除限制】,把Excel文件添加到软件中,点击【开始】就可以撤销文件的工作表保护了,整个过程不需要输入任何密码,进行暴力激活成功教程。…

  • springboot打包成jar_springboot精简打包

    springboot打包成jar_springboot精简打包Spring boot打war部署到tomcat上- 第一步 “` @MapperScan(“com.yglh.mapper”) @SpringBootApplication public class YglhApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Yg..

  • C语言整型转字符串_c++整形转字符串

    C语言整型转字符串_c++整形转字符串本文主要介绍在C++编程语言中,将整型转换为字符串类型的具体方法。1使用to_string函数在C++11标准中,可以使用to_string函数,将整型转换为字符串类型。1.1to_string函数介绍to_string函数的用法如下:stringto_string(intval);stringto_string(longval);stringto_string(longlongval);stringto_string(unsigned

    2022年10月18日
  • 2021 Java面试真题集锦

    2021 Java面试真题集锦目录…1大厂面试的基本流程 17字节跳动 17阿里 17腾讯 18网易游戏 18面试前需要准备: 18面试中可以借鉴的套路 19用简历争取到更多的面试机会 19自我介绍时,立即全面抛出技术栈和亮点 20先介绍项目背景,打消面试官疑问 21通过说项目管理工具,说明你不仅会写代码 22用SPRINGBOOT项目举例,说明你的技术基本面 23用实例说明你在内存调优方面的经验 24展示你在数据库调优方面的经验 25总结前文说辞 26准备项目说辞时,更可以准备后继面试官的问

  • 模糊数学评价体系_灰色模糊综合评价

    模糊数学评价体系_灰色模糊综合评价>`建模算法整理`,文章主要介绍了模糊综合评价中的要把论域中的对象对应评语集合一个指定的评语的情况(一级模糊评价)>`参考学习资料`:清风数学建模数学建模算法与程序>`其他资源`:2016到2020美赛o奖论文===姜启源司守奎电子书===论文模板====算法代码>如果需要可私信或者评论

    2022年10月29日
  • 前端vue面试题2021及答案_redux面试题

    前端vue面试题2021及答案_redux面试题1、html及css部分2.Js部分2.1数据类型面试官:JavaScript中什么是基本数据类型什么是引用数据类型?以及各个数据类型是如何存储的?⭐⭐⭐⭐⭐答:基本数据类型有NumberStringBooleanNullUndefinedSymbol(ES6新增数据类型)bigInt引用数据类型统称为Object类型,细分的话有ObjectArrayDate…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号