![]() |
1
8
tail recursion . 尾部递归意味着递归调用应该是递归方法的最后一个调用。然后,编译器可以将其优化为一个循环,防止发生堆栈溢出错误。
question about tail recursion 如用户sje397的注释所示。还可以看看 Stephen C's answer 对于这个问题,它提供了一些额外的信息。 |
![]() |
2
3
以下是@Ronald Wildenberg的回答:
简而言之,他们不支持。 this blog entry 作者:johnrose@Oracle,他在那里谈到了这个问题。这篇博文的主旨是提出一个字节码扩展来支持“硬”尾部调用。但最后一段暗示了为什么实现“软”(即透明)尾部调用是困难的。尾部调用优化会干扰JVM捕获堆栈跟踪的能力,这对Java安全体系结构有“影响”。 这个 Sun Bug Database Entry 提供有关问题的更多详细信息。同时阅读评论。
|
![]() |
3
2
“具有~100K次迭代的递归”是应该避免的,而不仅仅是在Java中。它只能通过尾部调用优化来工作,这并不总是可能的。所以最好不要养成过度递归的习惯。
|
![]() |
4
0
您可以通过以下方法增加java堆栈大小:
|
![]() |
5
0
支持深层(非尾部)递归的策略通常包含在支持一级连续性的策略中。你可能会发现 Implementation Strategies for First-Class Continuations (Clinger等人)有趣。 我脑子里有几个策略:
|
![]() |
Kon · OCaml中的模块类型语义 7 月前 |
![]() |
user20102550 · 如何在解析器中使用输入字符串 1 年前 |
![]() |
tijko · 处理整数数组时出现意外结果 1 年前 |
![]() |
David542 · 按列分区,按另一列排序 1 年前 |
|
Arnett Rufino · `max的输出是多少` 1 年前 |
![]() |
Adrian · 变量捕获:变量在函数闭包中的行为 1 年前 |