java - Java中的尾递归优化和递归

标签 java recursion tail-call-optimization tail-call

我有一个关于尾部调用优化的问题,我需要知道这段 java 代码的行为方式:

private void doSomething(int v) {

    inf f = someCalculation(v);

    if (f < 0) doSomething(v/2);
    else doSomething(v*2);

}

这段代码是一个无意义的例子,但我的问题是,在这种情况下:

  1. 第一个 doSomething() 调用会被优化吗?
  2. 第二个 doSomething() 调用会被优化吗?
  3. if/else block 会对优化产生任何影响吗?

谢谢

编辑:

请提供一个示例,说明如果语言不是 Java 而是其他具有 TCO 的语言,您将如何执行此操作

最佳答案

Java 8 没有任何尾部调用优化。不会优化任何调用(变成迭代/goto 语句)。

不过,关于 Java TCO 的讨论由来已久,Guy Steele 是其最著名的支持者之一。

我建议阅读this post来自 mlvm-dev 邮件列表,了解该主题的最新评论。

关于java - Java中的尾递归优化和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670760/

相关文章:

java - 绑定(bind)情况复杂

java - 在 Android 中使用四向滑动的 RecyclerView

Java:renameTo() 函数失败

C++递归地生成集合的排列

python - 跟踪和更新递归函数中的值

java - indexOfMaxInRange 返回错误的数字?

f# - 什么推理导致 `Sequence expression containing recursive definition is compiled incorrectly`

java - G1 GC 中的内存分配

lua - lua中的尾调用优化

recursion - Erlang、最后调用优化、lambda 函数以及如何防止堆栈增长