java - 始终避免 Java 中的递归方法?

标签 java performance recursion jvm tail-recursion

<分区>

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

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

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

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

最佳答案

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

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

关于java - 始终避免 Java 中的递归方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7514113/

相关文章:

java - 如何获取包含参数的请求字符串

Python,os.walk(),传递信息备份?

python - 通过二维数组递归

c - 数独 9 个盒子 ( 3x3 ) C 中的递归回溯所有组合

java - 如何在 Android 谷歌地图中为当前位置动态加载标记?

java - 无法解析符号 FirebaseListAdapter

php - 我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?

python - 为什么a = [0]的list(x for a中的x)比a = []更快?

java - 更新ArrayList的最高性能方法

java - Hibernate映射一对多关系:Parent's PK to Child's FK