循环,迭代,遍历及递归


偶然间看到一篇讲述遍历和循环的文章,然后一直想自己也没有缕清的几个概念,循环,迭代,遍历及递归。这次希望写一篇文章,语言相关性低的来讲清楚我理解的这几个词的意思。

这几个词在编程世界中是非常重要的,也是极其容易让初学者(如我)混淆的,然后膝盖中箭,跪在上面的。英文中对应这四个词分别是:

  • Loop
  • Iterate
  • Traverse
  • Recursion

尼玛,这一看,四个词都和重复有莫大的关系,可以都算是repeat的儿子吧,不管是亲儿子还是干儿子,所以这也就造就了仿佛好像似乎是重复,又好像不完全是重复的意思。下面直接上点干货:

  • 循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,Js中的 for ... in ... for while do ... while
  • 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。这其实是循环的一个子集,它是具有特定目标特征的,也就是按某种顺序。比如,去算一个数的阶乘,那种迭代就是直到什么发生,才停止的一种顺序。
  • 遍历(traverse),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。这个例子满大街,DFS,遍历DOM树之类的都是。
  • 递归(recursion),指的是一个函数不断调用自身的行为。比如,Js中 setTimeout 的递归调用来实现类似于 setINterval 的效果。

讲以上的概念的区别,那自然是用例子来讲是最清楚的,之后补上。先讲它们的联系,严格来讲,它们似乎都属于算法的范畴。换句话说,它们只不过是解决问题的不同手段和方式,而本质上则都是计算机编程中达成特定目标的途径。

左银右煌 /
Published under (CC) BY-NC-SA in categories programming  tagged with