Recursion 递归算法与迭代算法

Recursion 递归算法与迭代算法,recursion,iteration,Recursion,Iteration,我正在实现欧几里德算法来寻找两个整数的GCD(最大公因数) 给出了两个示例实现:递归和迭代。 我的问题: 在学校里,我记得我的教授们谈论递归函数时,好像它们非常流行一样,但我有一个疑问。与迭代版本相比,递归算法不会占用更多的堆栈空间,从而占用更多的内存吗?此外,由于调用函数需要一些初始化开销,递归算法不是比迭代算法慢吗 这完全取决于语言。如果您的语言具有尾部调用递归支持(现在有很多),那么它们将以相同的速度运行。如果没有,那么递归版本将更慢,并占用更多(宝贵的)堆栈空间 这完全取决于语言和编译

我正在实现欧几里德算法来寻找两个整数的GCD(最大公因数)

给出了两个示例实现:递归和迭代。

我的问题:


在学校里,我记得我的教授们谈论递归函数时,好像它们非常流行一样,但我有一个疑问。与迭代版本相比,递归算法不会占用更多的堆栈空间,从而占用更多的内存吗?此外,由于调用函数需要一些初始化开销,递归算法不是比迭代算法慢吗

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

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

递归在数学意义上可能更漂亮,但如果您对迭代更满意,就使用它吧