java - 递归运行时实现 Java 与其他/功能语言?

标签 java programming-languages recursion functional-programming

我喜欢递归,但在 Java 中,您有时会遇到死胡同。例如。我有一个案例,其中 ~100K 迭代的递归不起作用(StackOverflowError)。糟糕的是,由于这个运行时堆栈限制的原因,我不得不切换到烦人的“命令式循环”。

我想知道其他(尤其是函数式)语言如何在运行时绕过堆栈溢出?我想特别是函数式语言运行时可以更好地处理这个问题,因为递归是核心概念......

有人有一些信息或外部资源吗?

最佳答案

大多数语言都针对 tail recursion 进行了编译器优化.尾递归意味着递归调用应该是递归方法的最后一次调用。然后编译器可以将其优化为一个循环,防止发生堆栈溢出错误。

我不确定是否所有的 javac 实现都实现了尾递归。这不是规范所要求的。然而,它是任何递归程序的重要优化技术,所以我认为主流实现确实提供了尾递归。

您可以通过(简单的)非尾递归程序自行测试,该程序生成 StackOverflowError 并使其成为尾递归(例如,计算 factorial)。

编辑:有一个question about tail recursion以前在 Java 中,如用户 sje397 的评论中所示。另请查看 Stephen C's answer这个问题提供了一些额外的信息。

关于java - 递归运行时实现 Java 与其他/功能语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811728/

相关文章:

javascript - JS : bind function fail passing arguments in recursions

java - 使用递归的幂函数

java - 如何模拟具有多个参数的静态方法

java - 从 C++ 到 Java 的转变

programming-languages - Forth 还在使用吗?如果是这样,如何以及在哪里?

scala - Scala 和 Google 'Go' 语言之间是否有比较(逐个功能)?

java - 在自定义小部件中模板化成员字段?

java - 启动应用程序时后台服务杀死我的应用程序

java - 图像图标不显示

javascript - 在基本目录数组中递归查找子目录