Kon*_*che 8 java recursion performance jvm tail-recursion
我记得应该总是避免在Java中使用递归方法调用.我认为原因是,通过在堆上保存调用的方法而产生的开销不值得在实现中减少代码行.
但是,最近有人告诉我,如果递归实现很好地捕获了问题空间,那就不是这样了.我没有完全理解这一点,因为每个递归方法都可以迭代实现,例如通过使用堆栈.
有几个问题可以通过使用递归实现来解决,例如遍历树数据结构.
如果一个总是避免重复实现 Java或不?如果不是,那么决定使用递归或迭代实现的好标准是什么.生产的开销是重要的还是优化的?我已经阅读了stackoverflow,Java中不支持尾递归优化.
不,你不应该避免Java本身的递归.它在JVM中有其局限性,主要是你不能像在函数式语言中那样尽可能地递归(因为,正如你所指出的,JVM不支持尾递归优化),但它在这些中肯定是有用和可用的.限制.
因此,只要它使您的解决方案更简单,就使用它.是的,您始终可以将递归展开到迭代中,但结果代码可能通常更难以理解和维护.递归的性能通常不是事先要担心的问题.首先通过测量证明递归是程序中的性能瓶颈,然后您可以重写它.