Выбор ответа Middle Функции, расширения и scope-функции обновлено

Что делает tailrec

Вопрос

Что делает модификатор tailrec?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Хвостовая рекурсия превращается в цикл, стек не растёт. Если рекурсивный вызов последний в функции (результат сразу возвращается), tailrec позволяет компилятору заменить его на переход в начало, то есть на цикл.

Варианты ответа

  1. Кеширует результаты рекурсивных вызовов по аргументам
  2. Хвостовая рекурсия превращается в цикл, стек не растётправильный ответ
  3. Запускает каждый рекурсивный вызов в отдельном потоке
  4. Разрешает рекурсию в inline-функциях

Разбор

Если рекурсивный вызов последний в функции (результат сразу возвращается), tailrec позволяет компилятору заменить его на переход в начало, то есть на цикл. Стек не растёт, StackOverflowError не будет. Если вызов не хвостовой, компилятор выдаст предупреждение и оптимизации не будет. Мемоизацией и потоками tailrec не занимается.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.