首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的尾递归优化与递归

Java中的尾递归优化与递归
EN

Stack Overflow用户
提问于 2015-02-23 09:43:31
回答 2查看 2.2K关注 0票数 1

我有一个关于尾调用优化的问题,我需要知道这个java代码是如何运行的:

代码语言:javascript
复制
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/ any块以任何方式影响优化?

谢谢

编辑:

请提供一个示例,说明如果语言不是Java,而是具有TCO的其他语言,您将如何做到这一点

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-23 09:46:31

Java 8没有任何尾部调用优化。没有调用将被优化(转化为迭代/goto语句)。

然而,关于TCO for Java的讨论有着悠久的历史,Guy Steele是其最著名的支持者之一。

我建议从这个职位邮件列表中阅读mlvm-dev,以了解该主题的最新进展。

票数 5
EN

Stack Overflow用户

发布于 2015-02-23 10:13:34

尝试运行以下代码:

代码语言:javascript
复制
public static void main(String[] args) {
  for (int i = 1; i > 0; i *= 2) { doSomething(i); }
}

private static void doSomething(int start) {
  doSomething(start, start);
}

private static void doSomething(int i, int start) {
  if (i == 0) { System.out.println("done from " + start); }
  else { doSomething(i - 1, start); }
}

如果JVM可以在没有堆栈溢出的情况下运行它,那么它应该意味着它可以进行尾递归优化(或者非常好的常量传播)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28670760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档