Выбор ответа Middle Функции, расширения и scope-функции обновлено
Что делает tailrec
Вопрос
Что делает модификатор tailrec?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Хвостовая рекурсия превращается в цикл, стек не растёт. Если рекурсивный вызов последний в функции (результат сразу возвращается), tailrec позволяет компилятору заменить его на переход в начало, то есть на цикл.
Варианты ответа
- Кеширует результаты рекурсивных вызовов по аргументам
- Хвостовая рекурсия превращается в цикл, стек не растётправильный ответ
- Запускает каждый рекурсивный вызов в отдельном потоке
- Разрешает рекурсию в inline-функциях
Разбор
Если рекурсивный вызов последний в функции (результат сразу возвращается), tailrec позволяет компилятору заменить его на переход в начало, то есть на цикл. Стек не растёт, StackOverflowError не будет. Если вызов не хвостовой, компилятор выдаст предупреждение и оптимизации не будет. Мемоизацией и потоками tailrec не занимается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.