递归或迭代?

如果我们在循环中使用循环而不是递归,反之亦然,在两者都可用于相同目的的算法中,性能是否会受到影响? 例如:检查给定的字符串是否是回文。 我看到许多程序员使用递归作为一种手段来炫耀,当一个简单的迭代算法可以适应账单。 编译器在决定使用什么时起到至关重要的作用?


递归可能会更加昂贵,这取决于递归函数是否是递归函数(最后一行是递归调用)。 尾递归应该被编译器识别并优化其迭代对象(同时保持代码中简洁明了的实现)。

我会以最有意义的方式编写算法,并且对于必须在几个月或几年内维护代码的糟糕吸盘(无论是您自己还是其他人)来说最明确。 如果遇到性能问题,那么对代码进行概要分析,然后只有通过转向迭代实现来考虑优化。 您可能想要查看记忆和动态编程。


循环可能会为您的程序带来性能提升。 递归可能会为您的程序员带来性能提升。 选择哪种在你的情况下更重要!


比较递归和迭代就像比较一把十字螺丝刀和一个平头螺丝刀。 大多数情况下,您可以用扁头去除任何菲利普斯头螺钉,但如果您使用专为该螺钉设计的螺丝刀,它会更容易?

一些算法因为它们被设计的方式(斐波那契数列,遍历树状结构等)而适用于递归。 递归使算法更简洁,更容易理解(因此可共享和可重用)。

此外,一些递归算法使用“懒惰评估”,这使得它们比迭代兄弟更有效率。 这意味着他们只需要在需要时进行昂贵的计算,而不是每次循环运行。

这应该足以让你开始。 我会为你挖掘一些文章和例子。

链接1:Haskel vs PHP(递归与迭代)

这是一个程序员必须使用PHP处理大型数据集的例子。 他显示了使用递归在Haskel中处理是多么容易,但是由于PHP没有简单的方法来完成相同的方法,他不得不使用迭代来获得结果。

http://blog.webspecies.co.uk/2011-05-31/lazy-evaluation-with-php.html

链接2:掌握递归

递归的不良声誉大部分来自命令式语言的高成本和低效率。 本文的作者讨论了如何优化递归算法以使其更快,更高效。 他还介绍了如何将传统的循环转换为递归函数以及使用尾端递归的好处。 他的结语真的总结了我认为的一些关键点:

“递归编程为程序员提供了一种更好的方式来组织代码,这种方式既可维护又逻辑一致。”

http://www.ibm.com/developerworks/linux/library/l-recurs/index.html

链接3:递归比循环更快吗? (回答)

这是一个链接到一个类似于你的stackoverflow问题的答案。 作者指出,与递归或循环相关的很多基准都非常特定于语言。 命令式语言通常使用循环更快,递归速度更慢,功能语言反之亦然。 我认为从这个环节中得出的主要观点是,在语言不可知或情境盲目的意义下回答这个问题是非常困难的。

递归比循环更快吗?

链接地址: http://www.djcxy.com/p/80501.html

上一篇: Recursion or Iteration?

下一篇: What Is Tail Call Optimization?