迭代(iterate)和递归(recursion)的区别
斐波那契函数为例:
递归 | | 栈 | | :(重复多次调用程序或函数本身)
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)的区别相关推荐
- 编程中,循环、迭代、遍历和递归之间的区别
表示"重复"这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行 ...
- 什么是递归迭代?新递归迭代是什么呢?
[事物的隶属度往往具有时效性和空效性,即动态变化的隶属性:逻辑,尤其是组合逻辑也有时空变化性,时间一长,空间一变,就变成了非逻辑系统:集合概念中各元素的确定性.互异性.无序性在人机态势感知中都会不断变 ...
- 通过迭代(非递归)及递归将单链表逆序
通过迭代(非递归)及递归将单链表逆序 老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题.实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用list(in c++)或itera ...
- 2016-12-29 DNS简介上 域名空间、域、迭代解析、递归解析、DNS服务器
2016-12-29 DNS简介上 域名空间.域.迭代解析.递归解析.DNS服务器 Domain name system 域名系统(Domain Name System,DNS)是把名字映射到 ...
- 瀑布式开发、迭代开发、敏捷开发的区别
瀑布式开发.迭代开发,区别[都属于,生命周期模型] 两者都是一种开发模式,就像设计模式一样,考虑的角度不一样,个人感觉谈不到取代一说. 传统的瀑布式开发,也就是从需求到设计,从设计到编码,从编码到测试 ...
- 递归递推区别分析与例题总结
递归与递推 文章目录 递归与递推 特点 递归(recursive) 递推(iterative) 例题 递推例子 平面分割问题 直线分割平面(基本结论) 线圈分割平面 折线分割平面 偷懒方法 Catal ...
- DNS迭代式和递归式域名查询对比
背景知识:DNS数据库是树状的层次式的 本地域名服务器并不在这个体系当中,它相当于这个体系面向用户的代理. 迭代式:DNS server告诉用户:我不认识这域名,但我知道你可以问哪个DNS服务器 递归 ...
- LeetCode 144. Binary Tree Preorder Traversal--二叉树前序遍历--反向压栈--迭代-栈,递归--C++,Python解法
题目地址:Binary Tree Preorder Traversal - LeetCode Given a binary tree, return the preorder traversal of ...
- python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...
- 举例子说明什么是迭代什么是递归【转载】
举个例子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 ...
最新文章
- 一份其实很短的 LaTeX 入门文档
- 主程序与子程序不在同一程序模块中_分享:宏程序和子程序的应用
- linux查看端口所占用的进程号
- (七)HTML和CSS 、JavaScript 和Java到底有什么区别,今天终于明白了!!!
- java printf与println_浅析Java中print、printf、println的区别
- NAME:WRECK 漏洞影响近亿台物联网设备
- 后台admin省市县镇公共组件
- [转]Java杂谈(七)--接口amp; 组件、容器
- 解决SourceTree不断提示输入密码问题
- 御剑飞行扫描后门加上burpsuite字典树爆破
- java对象转换为map
- Android逆向不可不知的smali语言
- 制造业变革中的“三国杀
- 残暴啊,HR 智库联盟,难道真是打工人的噩梦?
- 设置jsp打开的默认方式
- 计算机中存储器的最小单位是什么意思,计算机内存储器的最小存储单位是什么...
- TensorFlow学习——Tensorflow Object Detection API(win10,CPU)
- 小程序生产环境必须要购买腾讯云作为服务器吗?
- 安防RTSP协议摄像头实现WEB端无插件直播流媒体服务EasyNVR实现海康大华宇视摄像头网页播放的方法
- poi画饼图、折线图等图表和设置颜色字体等