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