为什么递归有时更有效?

时间:2014-04-23 10:29:19

标签: optimization recursion backtracking

我正在学习优化,并且我看到了递归提供最佳解决方案的一些问题 - 例如,在回溯中找到迷宫中的出口。

为什么在函数内部调用函数比为类似问题编写一个不同但相似的函数更有效 - 或者只是用相同的参数调用它本身?

例如,当我为迷宫求解算法制作伪代码时,我找到了将第二个调用放在函数外部的方法。

2 个答案:

答案 0 :(得分:1)

通常,它取决于处理器特性,如分支预测和缓存大小。

例如:如果您的求解算法大小大于处理器高速缓存大小,则CPU必须从主内存或L2高速缓存中检索多少代码,这是一个较慢的操作。

答案 1 :(得分:1)

如果我理解你的例子,这不是递归算法的真实例子。由于该功能最多只调用一次,我认为效率影响不大。基本上你可以使用不同的函数,或者调用两次相同的函数。这可能是通过避免重复(稍微)减少代码长度来完成的。

在我个人看来,这样的'技巧'会适得其反,因为它们会降低可读性。

如果您对实际收益(以及递归的缺点)感兴趣,您应该看一些代码,其中递归实际上用于解决减少案例的相同问题。一个很好的例子是二进制搜索,它可以迭代地或递归地完成。您可以找到许多其他排序和搜索算法。