language-agnostic - "Necessary"命令式语言中递归的使用

标签 language-agnostic recursion iteration

我最近在几个不同的地方看到了类似这样的评论:“我在学校学到了递归,但从那以后从未使用过它或感觉需要它。” (递归似乎是某些程序员群体中“书本学习”的流行示例。)

确实,在 Java 和 Ruby[1] 等命令式语言中,我们通常使用迭代并避免递归,部分原因是堆栈溢出的风险,部分原因是这是这些语言中大多数程序员的风格已经习惯了。

现在我知道,严格来说,在此类语言中没有“必要”使用递归:无论事情变得多么复杂,人们总是可以以某种方式用迭代代替递归。这里的“必要”是指以下内容:

您能想到此类语言中的任何特定代码示例,其中递归比迭代好得多(出于清晰、效率或其他原因),您无论如何都使用了递归,并且转换为迭代将是一个巨大的损失?

递归行走树在答案中已经多次提到:您对它的特殊使用到底是什么使递归比使用库定义的迭代器更好,如果它可用的话?

[1]:是的,我知道这些也是面向对象的语言。然而,这与这个问题没有直接关系。

最佳答案

没有“必要”使用递归。所有递归算法都可以转换为迭代算法。我似乎记得有一个堆栈是必要的,但我记不起具体的结构。

实际上,如果您不使用递归来执行以下操作(即使在命令式语言中),您就会有点生气:

  1. 树遍历
  2. 图表
  3. 词法分析/解析
  4. 排序

关于language-agnostic - "Necessary"命令式语言中递归的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011448/

相关文章:

SQL 递归 CTE 链接链

Java HashMap : How to get a key and value by index?

language-agnostic - 是否有任何语言具有一元 bool 切换运算符?

algorithm - 确定最后 "record"的最快方法 .. 理想情况下是并行的...(有间隙)

algorithm - 查找使图像在列表中唯一的像素,您可以改进蛮力吗?

javascript - 以这种方式使用平面 map 是否合适?

language-agnostic - Code Golf : Playing Cubes

algorithm - bash power set 函数背后的逻辑

python - pyplot绘制子图的方法

java - 阅读字符串直到空行然后阅读更多