Я написал функцию, как это в Scala:Scala Хвостовая рекурсия Оптимизация на короткозамкнутым операций булевой
def isSorted[T](list : List[T])(compare : (T, T) => Boolean) : Boolean = {
list match {
case Nil => true
case x :: Nil => true
case x :: rest => !compare(rest.head, x) && isSorted(rest)(compare)
}
}
Мне интересно, будет ли компилятор оптимизировать на рекурсивный вызов. Рекурсивный вызов может только произойдет, если ведущее сравнение будет успешным. Если нет, есть ли способ взломать раньше и все же добиться оптимизации рекурсии хвоста?
вот что ['@ annotation.tailrec'] (http://stackoverflow.com/questions/3114142/what-is-the-scala- аннотация для обеспечения-хвост-рекурсивная-функция-оптимизирована) для –
Прохладный. Кажется, он оптимизирован. Благодаря! –
Просто, чтобы быть понятным, '@ tailrec' не волшебным образом делает метод хвостовым рекурсивным, это делает его ошибкой, чтобы он не был хвостовым рекурсивным. –