Ответ
Рекурсия в inline-функциях запрещена, потому что компилятор не может развернуть рекурсивный вызов в месте использования. inline подразумевает подстановку тела функции вместо вызова, но рекурсия требует динамического стека вызовов, что противоречит идее инлайнинга.
Пример:
inline fun recursive(n: Int) { // Ошибка компиляции: recursive call in inline function
if (n > 0) recursive(n - 1)
}
Компилятор выдаст ошибку, так как невозможно определить глубину рекурсии на этапе компиляции.
Ответ 18+ 🔞
Э, слушай, вот тебе история про одну засаду в программировании. Представь, ты решил сделать функцию inline — ну, чтобы компилятор не вызывал её, а тупо вставил её код прямо на место вызова, как будто ты сам его там написал. Быстро, без лишних телодвижений, красота.
И тут тебе в голову приходит гениальная, блядь, идея: «А сделаю-ка я её рекурсивной!» Ну, чтобы она сама себя вызывала, как та обезьяна с гранатой, пока условие не выполнится. И ты пишешь что-то типа:
inline fun recursive(n: Int) {
if (n > 0) recursive(n - 1)
}
И тут, ёпта, наступает момент истины. Ты ждёшь чуда, а компилятор смотрит на этот код и просто охуевает. У него волнение ебать начинается. Он пытается понять: «Мужик, а сколько раз мне эту хрень подставлять-то?»
Ведь суть inline в том, чтобы развернуть тело. А тут рекурсия — это как мартышка, которая хвост себе отгрызть пытается. Глубину-то на этапе компиляции не определить! Может, она один раз вызовется, а может, десять тысяч. Компилятору терпения ноль ебать на такие фокусы.
И он тебе так вежливо, но твёрдо заявляет: «Нет, браток, так не пойдёт. Recursive call in inline function». То есть, рекурсивный вызов в инлайн-функции — это пиздец, а не идея. Противоречие полное. Инлайн хочет всё разложить по полочкам здесь и сейчас, а рекурсия — это история про «погоди, я ещё сам не знаю, сколько раз повторится».
Вот и получается, что рекурсия и inline — это как два пидораса в одной бане: вместе не уживутся. Одно другому мешает. Так что запомни: хочешь рекурсию — делай обычную функцию. А inline оставь для простых операций, где всё ясно как божий день. Иначе будет тебе не хиросима, а настоящая компиляторная срака.