下面的程序,编译和测试,它有时会返回结果,有时填充有斯卡拉阶乘不
java.lang.StackOverflowError
at scala.BigInt$.apply(BigInt.scala:47)
at scala.BigInt.equals(BigInt.scala:129)
at scala.runtime.BoxesRunTime.equals(Unknown Source)
at bigint$.factorial(fact2.scala:3)
at bigint$.factorial(fact2.scala:3)
...
该节目的屏幕:
object bigint extends Application {
def factorial(n: BigInt): BigInt = if (n == 0) 1 else n * factorial(n-1)
println("4391! = "+factorial(4391))
}
我的问题:
- 是不是因为是在JVM上,有时会发生,someti堆栈溢出mes不?
- 这种非确定性行为是否被视为一个错误?
- 我认为斯卡拉没有尾递归呢?我怎样才能让它尾巴缓解呢?
详情:
Scala编译器版本2.7.5.final - 版权所有2002-2009,LAMP/EPFL的Scala代码 亚军版本2.7.5.final - 版权所有2002-2009 ,LAMP/EPFL
Java版本 “1.6.0_0” 的OpenJDK 运行时环境(建立 1.6.0_0-B11)的OpenJDK客户机VM(建立1.6.0_0-B11,混合模式,共享)
Ubuntu的2.6.24-24-通用
你的“couldn”的意思t看到这个“第一行”?你可以将输出传送到文件中吗? – msi 2009-07-27 10:35:36
@msiemeri,奇怪的是当我“scala bigint>文件”只有在程序没有粉碎时才起作用。 – 2009-07-27 10:43:00
您是否尝试过“scala bigint> file 2>&1”?用2>&1将stderr的输出重定向到标准输出接收器(在本例中为'文件')。 – msi 2009-07-27 12:03:50