Я слежу за курсом функционального программирования на Scala на Coursera, чтобы выучить язык.
Они ввели понятие хвостовых рекурсивных функций и определили их в основном как функцию, которая заканчивается вызовом самой себя. Но затем они показывают это как отработанный пример:
def sum(f: Int => Int)(a: Int, b: Int): Int = {
def loop(a: Int, acc: Int): Int = {
if (a > b) acc
else loop(a + 1, f(a) + acc)
}
loop(a, 0)
}
Если я аннотирую сумму с помощью @tailrec, я получаю сообщение об ошибке, потому что IDE (IntelliJ) не считает ее хвостовой рекурсивной.
Сумма называется хвостовой рекурсивной здесь, или "цикл" внутренней реализации в данном случае считается хвостовой рекурсией?