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

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

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

迭代和递归的区别:

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

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

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

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

 

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

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

         例如:for,while循环

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

 总结如下:

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

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

b.代码易读;

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

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

b.容易造成堆栈溢出

迭代

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

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

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

b.无额外开销。

a.代码难理解;

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

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

两者关系

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

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

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

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

(0)
上一篇 2022年6月6日 上午6:00
下一篇 2022年6月6日 上午6:16


相关推荐

  • sudoers修改_为用户增加sudo权限(修改sudoers文件)

    sudoers修改_为用户增加sudo权限(修改sudoers文件)在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开。普通用户执行到系统程序时,需要临时提升权限,sudo就是我们常用的命令,仅需要输入当前用户密码,便可以完成权限的临时提升。在使用sudo命令的过程中,我们经常会遇到当前用户不在sudoers文件中的提示信息,如果解决该问题呢?通过下面几个步骤…

    2022年6月20日
    36
  • java常识-java怎么换行「建议收藏」

    java常识-java怎么换行「建议收藏」文章目录”\r”和”\n”的区别”\r”和”\n”的由来回车键和输入的”\n”有不同吗?系统影响java使用换行符的几种方式“\r”和”\n”的区别回车\r本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即CarriageReturn换行\n本义是光标往下一行(不一定到下一行行首),并不移动左右。n的英文newline,控制字符可以写成LF,即LineFeed也就是说,如果想要到下一行行首,一般的写法应该是”\r\n”,0D0A,即ASCII码对应的‘\r

    2022年7月7日
    96
  • 开发linux学习板子_linux嵌入式开发板推荐,资深程序员教给你

    开发linux学习板子_linux嵌入式开发板推荐,资深程序员教给你嵌入式是现在发展最快的 IT 技术之一了 很多人都选择了嵌入式这一行业 对于嵌入式来说 他挣得多 前景也很不错 学习嵌入式 开发板是最离不开的了 很多出入嵌入式行业的人对于嵌入式开发板 不知道 应该怎么选 今天在这里听听资深程序员怎么说 嵌入式开发板的选择也不用过于纠结 对于开发板来说 你应该首先要了解嵌入式 linux 开发板 嵌入式开发板 Embeddeddeve 就是半导

    2026年3月17日
    2
  • 数据库四大特性_Mysql数据库四种特性

    数据库四大特性_Mysql数据库四种特性1、原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。2、一致性(Co

    2022年8月4日
    11
  • 再见 Cursor!玩转 Claude Code 的 23 个实用小技巧,效率拉满!!

    再见 Cursor!玩转 Claude Code 的 23 个实用小技巧,效率拉满!!

    2026年3月16日
    2
  • QT QList介绍及应用

    QT QList介绍及应用QList是目前最常用的容器类,它存储了给定类型的值的一个列表,而这些值可以通过索引访问。QList使用数组来实现,以确保进行快速的基于索引的访问。使用QList::append和QList::prepend在列表的两端进行添加项目。使用QList::insert()在列表的中间插入项目。实例:#include<QCoreApplication>#include<Q…

    2025年6月14日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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