【发布时间】:2011-09-29 07:20:13
【问题描述】:
当我执行一个 Scala 程序时,我得到一个java.lang.StackOverflowError。
我相信用-DXss=n可以设置栈大小,但是不行
在我的系统上:
Scala compiler version 2.7.7final and
Linux 2.6.38-8-generic #42-Ubuntu
附加的程序见证了我系统上的问题。
// scalac StackOverflow.scala
// scala StackOverflow 6000
// scala -DXms=200M -DXmx=200M -DXss=200M StackOverflow 6000
object StackOverflow {
def recur(k: Double): Double = {
// check effects of various commands
println(k)
// try to prevent tail recursion
if (k>0) return recur(k-1)+k/(k+1)
else return 0.0
}
def main(args: Array[String]) {
if (args.length == 0) println("Missing argument");
val k = args(0).toInt+0.1
recur(k)
}
}
塞尔吉奥
【问题讨论】:
-
您还可以将您的函数重写为尾递归,并检查编译器是否将其编译为带有
@tailrec注释的循环。 -
@Jean-Philippe:
@tailrec仅在 2.8 后可用。 @Sergio:请更新到最新版本(当前为 2.9.0.1),Scala 在 2.7 和 2.9 之间有了巨大的改进。