【问题标题】:Why is java better at handling recursion ? [closed]为什么java更擅长处理递归? [关闭]
【发布时间】:2011-09-07 17:11:28
【问题描述】:

我听到我的一位同事说 Java 处理递归比 c 或 C++ 更有效,我只是好奇它为什么能够这样做?我的意思是什么是“幕后”的过程,使这发生。

感谢所有的努力。

【问题讨论】:

  • 他们提供了什么理由?由于 JIT,我可以看到 Java 能够更好地优化某些代码,但也有 C/C++ 编译器使 JVM 没有的优化,例如 tail-call optimization
  • 显然正确答案在this question。 :)
  • @birryree - 我不知道 JVM/Java 编译器的当前状态,但 3 年前的 this SO question 声明 JVM(至少在当时)确实支持 self 的特定情况-recursive(根据我的经验,这是实际编写的绝大多数递归函数)。对于大于单个函数的递归“循环”不这样做的安全原因是有道理的,尽管因为那是 3 年的历史,它们可能早就被解决了。
  • 为什么这个问题被关闭了?在我看来,它非常适合常见问题解答中的问答格式。如今,一些普通用户似乎将解决问题作为一项运动。我只是在输入一个非常详细的答案......
  • 对不起,我的答案不见了。不过stackoverflow.com/questions/105834/…里也说了,这里已经有人提过了。

标签: java recursion


【解决方案1】:

关于递归的常见问题(不是 100% 确定这是您的同事所指的)是“它”(编译器、JIT、运行时等)是否可以(并且确实)实现“尾调用优化” .目标是,不是让代码进行递归(进入相同的函数或通过相同的函数“循环”)的“真实”调用(在调用堆栈中引入一个新帧),您可以获得相同的效果,而无需这样做。

维基百科页面的描述相当不错。

http://en.wikipedia.org/wiki/Tail_call

【讨论】:

    【解决方案2】:

    如果它是正确的,那是因为 JIT 编译能够比 C 编译器更好地优化递归。 http://en.wikipedia.org/wiki/Just-in-time_compilation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-20
      • 2010-11-22
      • 2011-03-26
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2011-02-11
      相关资源
      最近更新 更多