Itt*_*ayD 8 performance scala tail-recursion scalac
为什么scalac(Scala编译器)不优化尾递归?
代码和编译器调用,演示了这一点:
> cat foo.scala
class Foo {
def ifak(n: Int, acc: Int):Int = {
if (n == 1) acc
else ifak(n-1, n*acc)
}
}
> scalac foo.scala
> jd-gui Foo.class
import scala.ScalaObject;
public class Foo
implements ScalaObject
{
public int ifak(int n, int acc)
{
return ((n == 1) ? acc :
ifak(n - 1, n * acc));
}
}
Wal*_*ang 12
可以重写的方法不能是尾递归.试试这个:
class Foo {
private def ifak(n: Int, acc: Int): Int = {
if (n == 1) acc
else ifak(n-1, n*acc)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |