我偶然发现了下面的链接,它展示了scala消息是多么有趣;)
Scala REPL "She's gone rogue" error message
当我尝试这个例子时,它挂起了forever.what发生在这里?
这是一个已知的bug吗?它是某种陷阱吗?
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29
).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def factorial(n: Int):Int = {
| if (n == 1) n // forgot 'return' here
| factorial(n - 1)
| }
factorial: (n: Int)Int
scala> factorial(10)发布于 2012-08-04 23:38:48
问题就是代码中所指出的,缺少return。递归永远不会终止。
factorial(n - 1)没有以任何方式连接到if语句。这意味着,它是无条件执行的。factorial()会一直称自己为。
添加一个基本情况(即递归停止的地方):
def factorial(n: Int):Int = {
| if (n == 1) return n
| factorial(n - 1)
| }这也是可行的:
def factorial(n: Int):Int = {
| if (n == 1) n
| else factorial(n - 1)
| }这将实际产生n的阶乘(其他返回1):
def factorial(n: Int):Int = {
| if (n <= 1) 1
| else n * factorial(n - 1)
| }请注意,这也适用于case n = 0。然而,它仍然接受负数。
https://stackoverflow.com/questions/11809834
复制相似问题