我最近在几个不同的地方看到类似这样的评论:“我在学校学习了递归,但从那时起就再也没有使用过或觉得有必要使用它。” (递归似乎是特定程序员群体中“书本学习”的一个流行例子。)
的确,在 Java 和 Ruby[1] 等命令式语言中,我们通常使用迭代并避免递归,部分原因是存在堆栈溢出的风险,部分原因是大多数程序员在这些语言中习惯于使用这种风格.
现在我知道,严格来说,在这些语言中没有“必要”使用递归:无论事情变得多么复杂,人们总是可以以某种方式用迭代代替递归。这里的“必要”是指以下内容:
你能想到在这样的语言中递归比迭代好得多的任何特定代码示例(出于清晰、效率或其他原因),你无论如何都使用递归,而转换为迭代将是一个很大的损失?
答案中多次提到递归行走树:您对它的特定使用究竟是什么使递归比使用库定义的迭代器更好,它是否可用?
[1]:是的,我知道这些也是面向对象的语言。然而,这与这个问题没有直接关系。