Các chương trình sau đây, được biên soạn và thử nghiệm, đôi khi nó trả về kết quả, và đôi khi lấp đầy màn hình vớiScala thừa trên một số lượng lớn đôi khi bị treo và đôi khi không
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)
...
Chương trình:
object bigint extends Application {
def factorial(n: BigInt): BigInt = if (n == 0) 1 else n * factorial(n-1)
println("4391! = "+factorial(4391))
}
câu hỏi của tôi:
- có phải vì có một chồng tràn trên JVM, mà đôi khi xảy ra và someti mes không?
- Hành vi không xác định này có được coi là lỗi không?
- Tôi cho rằng Scala đã không tính toán lại điều này? làm thế nào tôi có thể làm cho nó đuôi recurse này?
chi tiết:
Scala biên dịch phiên bản 2.7.5.final - Copyright 2002-2009, LAMP/EPFL Scala mã phiên bản Á hậu 2.7.5.final - Copyright 2002-2009 , LAMP/EPFL
phiên bản java "1.6.0_0" OpenJDK Runtime Environment (xây dựng 1.6.0_0-b11) OpenJDK khách hàng VM (xây dựng 1.6.0_0-b11, chế độ hỗn hợp, chia sẻ)
Ubuntu 2.6.24-24-generic
Ý anh là gì bởi "couldn' t thấy dòng đầu tiên của điều này "? Bạn có thể dẫn đầu ra vào một tệp không? – msi
@msiemeri, kỳ lạ khi tôi "scala bigint> file" nó chỉ hoạt động khi chương trình không đè bẹp. –
Bạn có thử "scala bigint> file 2> & 1" không? Với 2> & 1 nó chuyển hướng đầu ra của stderr sang bồn rửa stdout (trong trường hợp này là 'file'). – msi