斯卡拉中的尾递归,这里我在 eclipse IDE 中运行 scala 代码,但没有输出


object TailRec extends App {
def anotherFactorial(x: Int): BigInt = {
@tailrec
def helperFact(n: Int, accu: BigInt): BigInt =
if(n <= 1)
accu
else
helperFact(n-1, n * accu)
helperFact(x, 1)
}
println(anotherFactorial(5000)) // I want output but in console no output is printed
}

这不起作用有两个可能的原因(两者都与递归函数无关)。

如果这是程序的入口点,那么问题是Eclipse没有配置为使用TailRec作为入口点。如果您没有收到来自 Eclipse 的警告,那么您可能有另一个默认使用的入口点(例如object Main extends App)。您需要将 Eclipse 配置为使用TailRec作为入口点对象。

如果这是应用程序中具有不同入口点的对象,那么问题在于它扩展了App这会对对象的初始化方式执行奇怪的操作。删除此超类并调用anotherFactorial,它应该运行您的println语句。(您需要调用方法或检查对象中的值才能对其进行初始化)

在这两种情况下,您都可以在object中使用简单的println来测试这一点,因为递归阶乘函数不相关(并且工作正常!

最新更新