循环 递归 遍历
最近在学遍历二叉树,感觉对此类概念很迷,就专门查了查,觉得这个理解不错。。。
表示“重复”这个含义的词有很多, 比如 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. 大部分的递归, 遍历, 迭代, 都是循环.
递归是重复调用函数自身实现循环。
迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
// 迭代,重复一定的算法,达到想要的目的。数学上二分法,牛顿法是很好的迭代例子
function iteration(x){
var sum=1;
for(x; x>=1; x–){
sum = sum*x;
}
}
// 递归,自身调用自身的迭代就是递归。
// 但是正式定义好像不是这么说的。这只是我个人理解
function recursion(x){
if(x>1){
return x*recursion(x-1);
}else{
return 1;
}
}
迭代式开发:迭代式开发应该是取自"迭代(数学)"的概念的, 意思是把开发过程划分成若干个小目标, 对每个小目标单独进行设计, 开发, 测试, 逐步地完成整个项目. 而传统的开发过程是纯线性的, 先统一设计, 再统一编码, 再统一测试. 相比于传统开发过程, 迭代式开发更灵活, 能够适应需求的变更, 及时验证设计的可行性等等的…
迭代开发更接近循环的意思,是指多次按照开发,测试,发布这样的周期循环来完成一个软件产品的最终发布。而不是试图一次性完成所有工作,发布最终版本
结论:
循环(loop) - 最基础的概念, 所有重复的行为
递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况
(数学)迭代(iterate) - 在多次循环中逐步接近结果
(编程)迭代(iterate) - 按顺序访问线性结构中的每一项
遍历(traversal) - 按规则访问非线性结构中的每一项