метод не в позиции хвостовой рекурсии?
could not optimize @tailrec annotated method sum3: it contains a recursive call not in tail position
@tailrec
def sum3(xs: List[Int]): Int = {
if (xs.isEmpty) 0
else xs.head + sum3(xs.tail)
}
вызов же sum3 идет вконце….
``` @tailrec def sum3(xs: List[Int]): Int = { if (xs.isEmpty) 0 else xs.head.+(sum3(xs.tail)) } ```
def sum3(xs: List[Int]): Int = { @tailrec def loop(xs: List[Int], acc: Int): Int = { if (xs.isEmpty) 0 else loop(xs.tail, acc + xs.head) } loop(xs, 0) }
Пушто там оператор суммы есть. Для хвостовой рекурсии у тебя все операции должны делаться на стеке и ничего, кроме вызова функции, быть не должно
идею я уловила, но такой код не зарабтал тоже could not optimize @tailrec annotated method sum3: it contains a recursive call not in tail position [error] else xs.head + sum3(xs.tail)
В таком виде - это не хвостовая рекурсия
Как не работает, когда работает https://scastie.scala-lang.org/w1JUZaQ5QZWnRhEDJk99iw
только не 0 а acc надо возвращать
там работает, в консоли у меня локально. не сработало - выдает такую ошибку
Ибо куска кода, который указан в ошибке, в примере просто нет
Обсуждают сегодня