编程中,循环、迭代、遍历和递归之间的区别
来源:互联网 发布:网络怎么连接电视 编辑:程序博客网 时间:2024/06/05 16:26
表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. 大部分的递归, 遍历, 迭代, 都是循环.
递归的定义是, 根据一种(几种)基本情况定义的算法, 其他复杂情况都可以被逐步还原为基本情况.
在编程中的特征就是, 在函数定义内重复调用该函数.
例如斐波那契数列, 定义F(0)=1, F(1)=1, 所有其他情况: F(x)=F(x-1)+F(x-2). 所有大于1的整数经过有限次的反推之后都可以转换到两种基本情况. 而在编程中, 算法则是这样的:
int F(x){ if(x==0 || x==1) return 1; //这里是退出递归的条件, 以保证在有限次递归后能够得到结果 return F(x-1)+F(x-2); //转化为更为基本的情况, 重复调用自身进行计算}
迭代在数学和编程中有不同的含义. 迭代(数学): 在循环的基础上, 每一次循环, 都比上一次更为接近结果.
例如下面是一个迭代的例子:
int result = 0;for(int i=0; i<10; i++) result += i; //每一次循环之后, result都更加接近结果45
有很多数学问题, 都是迭代算法, 如牛顿迭代法(求平方根).
迭代(编程): 按顺序访问一个列表中的每一项, 在很多编程语言中表现为foreach语句:
$arr = [1, 2, 3, 4];foreach($arr as $i) echo $i;
遍历: 按一定规则访问一个非线性的结构中的每一项, 强调非线性结构(树, 图). 而迭代一般适用于线性结构(数组, 队列).
结论
- 循环(loop) - 最基础的概念, 所有重复的行为
- 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况
- (数学)迭代(iterate) - 在多次循环中逐步接近结果
- (编程)迭代(iterate) - 按顺序访问线性结构中的每一项
- 遍历(traversal) - 按规则访问非线性结构中的每一项
这些概念都表示“重复”的含义, 彼此互相交叉, 在上下文清晰的情况下, 不必做过于细致的区分.
参考:
http://www.nowamagic.net/librarys/veda/detail/2324
http://www.cn-cuckoo.com/2010/08/09/loop-iterate-traversal-and-recursion-1846.html
维基百科相关词条
- 编程中,循环、迭代、遍历和递归之间的区别
- 循环、递归、迭代和遍历的区别
- 循环、递归、遍历、迭代的区别
- 迭代、循环和遍历的区别
- 专业术语之------迭代,循环,遍历,递归的区别
- 专业术语:迭代、循环、遍历与递归的区别
- 递归 循环 迭代 遍历
- 循环、递归、迭代、遍历
- 循环 迭代 遍历 递归
- 迭代 递归 普通循环的区别
- 循环,迭代,遍历的区别
- javascript递归、循环、迭代、遍历和枚举概念
- 简单辨析:循环、递归、迭代、遍历
- 编程算法 - 中序遍历 递归/迭代 代码(C)
- 递归和迭代的区别
- 递归和迭代的区别
- 递归和迭代的区别
- 递归和迭代的区别
- 开启自启动python脚本
- Akonadi and Nepomuk
- 关于ARC的一些说法
- java编程思想(Think in java)读书笔记 一
- OSX: 查找目录服务通讯延时
- 编程中,循环、迭代、遍历和递归之间的区别
- Bash Tips
- java编程思想(Think in java)读书笔记 二
- JasperReport用户手册
- 判断101-200之间素数个数,并输出
- 【ubuntu】vim安装python自动补全插件(1)
- 【ubuntu】vim安装python自动补全插件(2)
- tarjian算法 最大强连通分支
- 配置串口、输出开发板VIVI的命令选项