Recursión de Kotlin

fun fact(x: Int): Int{ tailrec fun factTail(y: Int, z: Int): Int{ if (y == 0) return z else return factTail(y - 1, y * z) } return factTail(x, 1) } 

¿Podría alguien explicarme cómo funciona la function de recursión anterior en kotlin?

Comenzaré diciendo que la palabra key tailrec se usa solo como una optimization para el comstackdor que intentará express la function con un bucle y no con recursión, evitando el riesgo de desbordamiento de la stack .

Si evitamos la recursión, la function podría verse más o less así:

  fun fact(x: Int): Int { var result = x for (i in x - 1 downTo 1) { result *= i } return result } 

Existe un gran riesgo cuando usa la recursión en kotlin que es stackoverflow.

astackr

Como en la image anterior, la recursión funciona en kotlin. Habrá un tamaño máximo para la stack, si nuestra function de recursión va a infinito, cruzará el tamaño máximo y conducirá a la exception de StackOverflow. Así que evite el uso de recursión y use loop en su lugar