相关疑难解决方法(0)

JVM是否会阻止尾调用优化?

我在这个问题上看到了这个引用:什么是构建Web服务的好函数语言?

特别是Scala不支持尾调用消除,除了自递归函数,这限制了你可以做的组合种类(这是JVM的一个基本限制).

这是真的?如果是这样,那么创建这个基本限制的JVM是什么呢?

java jvm scala tail-recursion

98
推荐指数
4
解决办法
2万
查看次数

为什么JVM仍然不支持尾调用优化?

jvm-prevent-tail-call-optimization之后两年,似乎有一个原型 实现,MLVM已经将该功能列为"proto 80%"一段时间了.

Sun的/ Oracle方面是否没有积极的兴趣支持尾调用,或者只是尾部调用" 在每个功能优先级列表中排在第二位 [...]"如JVM所述语言峰会

如果有人测试了MLVM构建并且可以分享它的工作原理(如果有的话),我会非常感兴趣.

更新: 请注意,像Avian这样的某些虚拟机支持正确的尾部调用,没有任何问题.

java language-agnostic optimization jvm tail-call-optimization

95
推荐指数
4
解决办法
2万
查看次数

如何对较小(子)阵列进行排序使快速排序更快?

我听说在quicksort中最好先在较小的子阵列上调用递归.例如,如果5是数据透视表并且数据被排序到4,1,3,5,7,6那么最好先对子数组进行排序,7,6因为它包含两个元素,其中4,1,3包含三个元素.

所有知识的来源都为快速排序提供了伪代码

quicksort(A, i, k):
  if i < k:
    p := partition(A, i, k)
    quicksort(A, i, p - 1)
    quicksort(A, p + 1, k)
Run Code Online (Sandbox Code Playgroud)

因此,首先实现在较小阵列上递归的算法看起来就像

quicksort(A, i, k):
  if i < k:
    p := partition(A, i, k)
    if(p-i > k-p)
    /*difference from start point to pivot is greater than
   difference from pivot to end point*/
        quicksort(A, p + 1, k)
        quicksort(A, i, p - 1)
   else
        quicksort(A, i, p - 1) …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm recursion

6
推荐指数
1
解决办法
803
查看次数