Sobes.tech
Junior — Middle

Kotlin'da rekursiv funksiyalar uchun inline kalit so'zini tailrec bilan birga ishlatish mumkinmi?

sobes.tech AI

AIdan javob

Kotlin tilida tailrec soʻzi tail-rekursiyani optimallashtirish uchun ishlatiladi, bu kompilatorga rekursiv chaqiruvni siklga aylantirish va stack overflow oldini olish imkonini beradi. Boshqa tomondan, inline soʻzi funksiyaning tanasini chaqirish joyiga toʻgʻridan-toʻgʻri joylashtirish uchun majbur qiladi, bu esa xarajatlarni kamaytiradi.

Ammo, inline bilan tailrec birga qoʻllanilishi mumkin emas. Bu, tailrec funksiyaning oddiy bo‘lishi va siklga aylantirilishi kerakligini talab qilgani, inline esa funksiyaning chaqirilish usulini o‘zgartirishi va bu tail-rekursiya optimallashtirish bilan ziddiyatga olib kelishi bilan bogʻliq.

Agar siz ikkala modifikator bilan funksiyani e’lon qilishga harakat qilsangiz, kompilator xato beradi.

Noto‘g‘ri foydalanish misoli:

inline tailrec fun factorial(n: Int, acc: Int = 1): Int {
    return if (n <= 1) acc else factorial(n - 1, n * acc)
}

To‘g‘ri usul — faqat tailrec ni ishlatish, bu tail-rekursiya optimallashtirishni talab qiladigan rekursiv funksiyalar uchun.