Хвостовая рекурсия в Scala, здесь я запускаю Scala-код в Eclipse IDE, но не получаю вывод - PullRequest
0 голосов
/ 26 октября 2018
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
}

1 Ответ

0 голосов
/ 29 октября 2018

Существует две возможные причины, по которым это не работает (ни одна из которых не относится к рекурсивным функциям).

Если предполагается, что это точка входа в программу, то проблема в том, что Eclipse не настроениспользовать TailRec в качестве точки входа.Если вы не получаете предупреждение от Eclipse, то, вероятно, у вас есть другая точка входа, которая используется по умолчанию (например, object Main extends App).Вам необходимо настроить Eclipse для использования TailRec в качестве объекта точки входа.

Если это объект в приложении с другой точкой входа, то проблема в том, что он расширяет App, что делаетстранные вещи в способе инициализации объекта.Удалите этот суперкласс и вызовите anotherFactorial, и он должен выполнить ваш оператор println.(Вам необходимо вызвать метод или проверить значение в объекте для его инициализации)

В обоих случаях вы можете проверить это с помощью простого println в object, потому что рекурсивныйфункция факториала не актуальна (и работает отлично!)

...