Recursión de la cola de Kotlin

En la llamada recursiva tradicional , primero realizamos nuestra llamada recursiva y luego tomamos el valor de retorno de la llamada recursiva y calculamos el resultado. Pero en la recursión de cola , primero realizamos el cálculo y luego ejecutamos la llamada recursiva, pasando los resultados del paso actual a la siguiente llamada recursiva. Al final, tanto la recursión como la recursión de cola dan el mismo resultado. La regla que se debe seguir para la recursión de cola es que la llamada recursiva debe ser la última llamada del método.

Beneficios de usar recursividad de cola –

  1. En la recursión de cola, la llamada de función es lo último que ejecuta la función y no queda nada en la función actual para ejecutar. Por lo tanto, no es necesario guardar la llamada de función actual en la memoria de la pila y el compilador puede reutilizar ese espacio de la pila para la próxima llamada recursiva.
  2. En la recursión de cola, no obtenemos StackOverflowError durante la ejecución del programa.

Ejemplo 1: Encuentre el factorial de un número usando recursividad de cola. 

Kotlin

// Kotlin program of factorial using tail-recursion
fun Fact(num: Int, x:Int):Long{
 
    return if(num==1)   // terminate condition
        x.toLong()
    else
        Fact(num-1,x*num)   //tail recursion
}
fun main() {
    var n = 1
    var result = Fact(5,n)
    println("Factorial of 5 is: $result")
}

Producción:

Factorial of 5 is: 120

Funcionamiento del programa anterior : Ejemplo 2: encuentre la suma de los elementos de una array usando recursividad de cola 

Kotlin

// two parameters passed an array and size of array
fun sum(args: Array<Int> , index:Int, s : Int = 0 ):Int{
    return if(index<=0) s
    else sum(args ,index-1, s + args[index-1])     // tail-recursion
}
 
fun main() {
    // array initialization
    val array = arrayOf(1,2,3,4,5,6,7,8,9,10)
    // size of array
    val n = array.size
    val result = sum(array,n)             // normal function call
    println("The sum of array elements is: $result")
}

Producción:

The sum of array elements is: 55

Explicación: Aquí, hemos pasado la array como argumento junto con otros dos parámetros en la función sum(). El valor predeterminado del parámetro (s) es igual a cero. Estamos calculando la suma de elementos, desde el último índice de la array, con cada llamada recursiva. Con la última llamada recursiva, tendremos la suma de todos los elementos en s y la devolveremos cuando la condición se cumpla.

Publicación traducida automáticamente

Artículo escrito por Praveenruhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *