总是避免Java中的递归方法?

时间:2011-09-22 11:37:18

标签: java performance recursion jvm tail-recursion

我记得应该总是避免在 Java 中使用递归方法调用。我认为原因是,通过在上保存调用的方法而产生的开销不值得在实现中减少代码行。

然而,最近有人告诉我,如果递归实现很好地捕获了问题空间,那就不是这样了。我没有完全理解这一点,因为每个递归方法都可以迭代实现,例如通过使用堆栈。

使用递归实现可以解决几个问题,例如遍历树数据结构。

是否应始终避免Java中的递归实现?如果不是,那么决定使用递归或迭代实现的好标准是什么。生产的开销是重要的还是优化的?我已经阅读了stackoverflow,Java中不支持尾递归优化

1 个答案:

答案 0 :(得分:9)

不,你不应该避免Java本身的递归。它在JVM中有其局限性,主要是因为你无法像在函数式语言中可以(因为,正如您所指出的,JVM不支持尾递归优化),但它在这些限制内肯定是有用的和可用的。

因此,只要它使您的解决方案更简单,就可以使用它。是的,您始终可以将递归展开到迭代中,但结果代码可能通常更难以理解和维护。递归的性能通常不是事先要担心的问题。首先用测量证明递归是程序中的性能瓶颈,然后你可以重写它。