我正在实现欧几里德算法来找到两个整数的GCD(最大公约数)。
给出了两个示例实现:递归和迭代。 http://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations
我的问题:
在学校,我记得我的教授们谈论的是递归功能,就像他们风靡一时,但我有一个疑问。与迭代版本相比,递归算法不占用更多的堆栈空间,因此需要更多的内存?另外,因为调用一个函数需要使用一些开销来进行初始化,所以递归算法不比它们的迭代对应物慢吗?
答案 0 :(得分:3)
完全取决于语言。如果您的语言具有尾调用递归支持(现在很多时候都会这样做),那么它们将以相同的速度运行。如果没有,那么递归版本将更慢并且需要更多(宝贵的)堆栈空间。
答案 1 :(得分:0)
这完全取决于语言和编译器。当前的计算机并不真正适用于有效的递归,但是一些编译器可以优化一些递归的情况,以便像循环一样有效地运行(实质上,它成为机器代码中的循环)。然后,一些编译器不能。
递归在数学意义上可能更美观,但如果您对迭代感觉更舒服,只需使用它。