El programa siguiente, fue compilado y probado, a veces devuelve el resultado, y, a veces llena la pantalla conScala factorial en grandes números a veces se bloquea y, a veces no se
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)
...
El programa:
object bigint extends Application {
def factorial(n: BigInt): BigInt = if (n == 0) 1 else n * factorial(n-1)
println("4391! = "+factorial(4391))
}
Mis preguntas:
- ¿es porque hay un desbordamiento de pila en la JVM, que a veces ocurre y someti mes no?
- ¿Este comportamiento no determinista se considera un error?
- Supongo que Scala no reclutó la cola esto? ¿Cómo puedo hacer que esto sea recurrente?
Detalles:
Scala versión del compilador 2.7.5.final - Derechos de Autor 2002-2009, LAMP/EPFL Scala código de la versión corredor 2.7.5.final - Derechos de Autor 2002-2009 , LAMP/EPFL
java version "1.6.0_0" OpenJDK Runtime Environment (build 1.6.0_0-b11) OpenJDK VM cliente (build 1.6.0_0-b11, mixed mode, sharing)
Ubuntu 2.6.24-24-generic
¿Qué quiere decir con "no podías t ver la primera línea de esto "? ¿Puedes canalizar la salida a un archivo? – msi
@msiemeri, curiosamente cuando "scala bigint> file" solo funciona cuando el programa no se aplasta. –
¿Has probado "scala bigint> file 2> & 1" también? Con 2> y 1 redirecciona la salida de stderr al receptor stdout (que es, en este caso, 'archivo'). – msi