因此,当我尝试计算数学exp时,我遇到了一个错误:
“线程[DTsystem-akka.actor.default-dispatcher-5]发生未捕获的错误:null,因为为ActorSystem [DTsystem]启用了“ akka.jvm-exit-on-致命错误”,所以关闭了JVM java.lang.StackOverflowError“
可能是什么问题?
def counter(n:Seq[Int]):Seq[Int]={
//count differences
val x = n.sliding(2,1).toList.map(x=> (x(1)-x(0)).toDouble)
//count how many times occurs each element of the list
val y = x.groupBy(i=>i).map(i => (i._1, i._2.size.toDouble)).toList
//count math expectation
val z = y.map(i=>(i._1, (i._2*1)/x.length))
val g = z.map(i=>i._1*i._2).sum.toInt
val fin = n.last+g
var arr = new ListBuffer[Int]()
arr+=fin
if (arr.last<100) counter(n)
else arr
}
答案 0 :(得分:3)
上面的代码本质上说:
def counter(n: Seq[Int]): Seq[Int] = {
val fin = someFunnyFunction(n)
if (fin < 100) throw new StackOverflowError
else ListBuffer(fin)
}
,也就是说,每当fin
小于100
时,您的代码就会说递归永远不会终止,并且程序会因StackOverflowError
而崩溃。例如,对于n = 1 to 10
,以上代码将与g = 1
和fin = 11
一起进行永恒递归。
形状的递归调用
def foo(x): Bar = {
...
foo(x)
...
}
在最佳案例中,是无用的,在其他所有案例中,它们都是有害的。