为什么 scalac 不(Scala http://en.wikipedia.org/wiki/Scala_%28programming_language%29编译器)优化尾递归?
演示这一点的代码和编译器调用:
> 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));
}
}
可以重写的方法不能是尾递归的。尝试这个:
class Foo {
private def ifak(n: Int, acc: Int): Int = {
if (n == 1) acc
else ifak(n-1, n*acc)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)