下面的程序,編譯和測試,它有時會返回結果,有時填充有斯卡拉階乘不
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