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 –
- 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.
- 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