【问题标题】:Recursive vs. Iterative algorithms递归与迭代算法
【发布时间】:2011-02-08 03:26:59
【问题描述】:

我正在实现欧几里得算法来查找两个整数的 GCD(最大公约数)。

给出了两个示例实现:递归和迭代。 http://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations

我的问题:

我记得在学校里,我的教授们谈论递归函数就像他们风靡一时一样,但我有一个疑问。与迭代版本相比,递归算法不占用更多堆栈空间并因此占用更多内存吗?另外,因为调用函数需要使用一些初始化开销,递归算法不是比迭代算法慢吗?

【问题讨论】:

标签: recursion iteration


【解决方案1】:

这完全取决于语言。如果您的语言支持尾调用递归(现在很多),那么它们将以相同的速度运行。如果没有,那么递归版本会更慢并占用更多(宝贵的)堆栈空间。

【讨论】:

    【解决方案2】:

    这完全取决于语言和编译器。当前的计算机并没有真正面向高效递归,但是一些编译器可以优化某些递归情况以像循环一样高效地运行(本质上,它变成了机器代码中的循环)。再说一次,有些编译器不能。

    递归在数学意义上可能更漂亮,但如果您对迭代感觉更舒服,那就使用它。

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多