相关疑难解决方法(0)

为什么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万
查看次数

什么是蹦床功能?

在最近的工作讨论中,有人提到了蹦床功能.

我已经阅读了维基百科的描述.这足以给出功能的一般概念,但我想要更具体的东西.

你有一个简单的代码片段来说明蹦床吗?

c language-agnostic programming-languages trampolines

89
推荐指数
5
解决办法
3万
查看次数

Recursion vs For循环 - Factorials,Java

获得因子(循环与递归)的这两种方法中的哪一种更有效/更快?如果那个可以改进,怎么样?

语言:Java

private static long factrecur(int n) {
    if (n == 0) {
        return 1;
    }
    else {
        return n * factrecur(n-1);
    }

}

private static long factloop(int a) {
    long total = 1;
    for (int b=a;b>=1;b--) {
        total *= b;
    }
    return total;
}
Run Code Online (Sandbox Code Playgroud)

java recursion for-loop

10
推荐指数
1
解决办法
7562
查看次数

Scala,尾递归与非尾递归,为什么尾递归较慢?

我在向朋友解释我期望Scala中的非尾递归函数比尾递归函数慢,所以我决定验证它.我用两种方式编写了一个很好的旧因子函数,并试图比较结果.这是代码:

def main(args: Array[String]): Unit = {
  val N = 2000 // not too much or else stackoverflows
  var spent1: Long = 0
  var spent2: Long = 0
  for ( i <- 1 to 100 ) { // repeat to average the results
    val t0 = System.nanoTime
    factorial(N)
    val t1 = System.nanoTime
    tailRecFact(N)
    val t2 = System.nanoTime
    spent1 += t1 - t0
    spent2 += t2 - t1
  }
  println(spent1/1000000f) // get milliseconds
  println(spent2/1000000f)
}

@tailrec
def tailRecFact(n: BigInt, s: BigInt …
Run Code Online (Sandbox Code Playgroud)

scala tail-recursion

9
推荐指数
2
解决办法
1023
查看次数