首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala REPL在运行factorial时挂起

Scala REPL在运行factorial时挂起
EN

Stack Overflow用户
提问于 2012-08-04 23:35:52
回答 1查看 183关注 0票数 1

我偶然发现了下面的链接,它展示了scala消息是多么有趣;)

Scala REPL "She's gone rogue" error message

当我尝试这个例子时,它挂起了forever.what发生在这里?

这是一个已知的bug吗?它是某种陷阱吗?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-04 23:38:48

问题就是代码中所指出的,缺少return。递归永远不会终止。

factorial(n - 1)没有以任何方式连接到if语句。这意味着,它是无条件执行的。factorial()会一直称自己为。

添加一个基本情况(即递归停止的地方):

代码语言:javascript
复制
def factorial(n: Int):Int = {
     |   if (n == 1) return n
     |   factorial(n - 1)
     | }

这也是可行的:

代码语言:javascript
复制
def factorial(n: Int):Int = {
     |   if (n == 1) n
     |   else factorial(n - 1)
     | }

这将实际产生n的阶乘(其他返回1):

代码语言:javascript
复制
def factorial(n: Int):Int = {
     |   if (n <= 1) 1
     |   else n * factorial(n - 1)
     | }

请注意,这也适用于case n = 0。然而,它仍然接受负数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11809834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档