首页 > 解决方案 > scala中的尾递归,这里我在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
}

标签: eclipsescalarecursiontail-recursion

解决方案


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

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

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

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


推荐阅读