斐波那契函数为例:

递归 | | 栈 | | :(重复多次调用程序或函数本身)

int fib(int n){  if(n>1) return fib(n-1) + fib(n-2);  else return n; // n = 0, 1时给出recursion终止条件
}  

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

迭代:(一个程序或函数循环迭代多次)

int fib(int n){  int i, temp0, temp1, temp2;        if(n<=1) return n;  temp1 = 0;  temp2 = 1;  for(i = 2; i <= n; i++){  temp0 = temp1 + temp2;  temp2 = temp1;  temp1 = temp0;  }  return temp0;
}  

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

总结:迭代更为底层一些;递归更为高级一些,更抽象一些;所以,有“迭代为人,递归为神”的说法。

转载于:https://www.cnblogs.com/westlife-11358/p/10399525.html

迭代(iterate)和递归(recursion)的区别相关推荐

  1. 编程中,循环、迭代、遍历和递归之间的区别

    表示"重复"这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行 ...

  2. 什么是递归迭代?新递归迭代是什么呢?

    [事物的隶属度往往具有时效性和空效性,即动态变化的隶属性:逻辑,尤其是组合逻辑也有时空变化性,时间一长,空间一变,就变成了非逻辑系统:集合概念中各元素的确定性.互异性.无序性在人机态势感知中都会不断变 ...

  3. 通过迭代(非递归)及递归将单链表逆序

    通过迭代(非递归)及递归将单链表逆序 老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题.实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用list(in c++)或itera ...

  4. 2016-12-29 DNS简介上 域名空间、域、迭代解析、递归解析、DNS服务器

    2016-12-29 DNS简介上 域名空间.域.迭代解析.递归解析.DNS服务器 Domain name system     域名系统(Domain Name System,DNS)是把名字映射到 ...

  5. 瀑布式开发、迭代开发、敏捷开发的区别

    瀑布式开发.迭代开发,区别[都属于,生命周期模型] 两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说. 传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试 ...

  6. 递归递推区别分析与例题总结

    递归与递推 文章目录 递归与递推 特点 递归(recursive) 递推(iterative) 例题 递推例子 平面分割问题 直线分割平面(基本结论) 线圈分割平面 折线分割平面 偷懒方法 Catal ...

  7. DNS迭代式和递归式域名查询对比

    背景知识:DNS数据库是树状的层次式的 本地域名服务器并不在这个体系当中,它相当于这个体系面向用户的代理. 迭代式:DNS server告诉用户:我不认识这域名,但我知道你可以问哪个DNS服务器 递归 ...

  8. LeetCode 144. Binary Tree Preorder Traversal--二叉树前序遍历--反向压栈--迭代-栈,递归--C++,Python解法

    题目地址:Binary Tree Preorder Traversal - LeetCode Given a binary tree, return the preorder traversal of ...

  9. python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...

    笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...

  10. 举例子说明什么是迭代什么是递归【转载】

    举个例子bai:我想求1+2+3+4+..+100的值. 迭代的做法:从1到100,顺着往下累加.1+2=3,3+3=6,6+4=10,10+5=15-- 程序表示, int i=1,sum=0; w ...

最新文章

  1. 一份其实很短的 LaTeX 入门文档
  2. 主程序与子程序不在同一程序模块中_分享:宏程序和子程序的应用
  3. linux查看端口所占用的进程号
  4. (七)HTML和CSS 、JavaScript 和Java到底有什么区别,今天终于明白了!!!
  5. java printf与println_浅析Java中print、printf、println的区别
  6. NAME:WRECK 漏洞影响近亿台物联网设备
  7. 后台admin省市县镇公共组件
  8. [转]Java杂谈(七)--接口amp; 组件、容器
  9. 解决SourceTree不断提示输入密码问题
  10. 御剑飞行扫描后门加上burpsuite字典树爆破
  11. java对象转换为map
  12. Android逆向不可不知的smali语言
  13. 制造业变革中的“三国杀
  14. 残暴啊,HR 智库联盟,难道真是打工人的噩梦?
  15. 设置jsp打开的默认方式
  16. 计算机中存储器的最小单位是什么意思,计算机内存储器的最小存储单位是什么...
  17. TensorFlow学习——Tensorflow Object Detection API(win10,CPU)
  18. 小程序生产环境必须要购买腾讯云作为服务器吗?
  19. 安防RTSP协议摄像头实现WEB端无插件直播流媒体服务EasyNVR实现海康大华宇视摄像头网页播放的方法
  20. poi画饼图、折线图等图表和设置颜色字体等

热门文章

  1. Service Object 整理和小结
  2. 微信服务号分享图片(包括微信头像以及二维码)
  3. 中间人攻击之ARP欺骗
  4. 不要因为网络劫持而泄露手机号码
  5. 水壶问题 python实现倒水操作
  6. linux docker创建容器教程
  7. 【十大排序算法系列】快速排序
  8. 毕业设计-基于微信小程序的校园换物系统
  9. 华为oj初级 字符逆序
  10. antd源码分析之——折叠面板(collapse)