Todo lo que necesita saber sobre la recursividad en Python



Este artículo lo ayudará a obtener un conocimiento detallado y completo sobre la recursividad en Python. ¿Cómo funciona? y cual es su proposito?

En palabras simples, la recursividad es una forma de resolver el problema haciendo que una función se llame a sí misma, La palabra ' recursivo 'Se origina en el verbo latino' repetirse ”, Que significa rehacer algo. Esto es lo que hace la función recursiva, vuelve a hacer lo mismo una y otra vez, es decir, se recuerda a sí misma. En este artículo, aprenderemos sobre la recursividad en Python. Los siguientes son los temas cubiertos en este blog:

¿Qué es la recursividad en Python?

La recursividad es el proceso de determinar algo en términos de sí mismo. Sabemos que en Python, cualquier función puede llamar a cualquier otra función, una función también puede llamarse a sí misma. Estos tipos de funciones que se llaman a sí mismas hasta que no se cumple determinada condición se denominan funciones recursivas.





Recursion-in-Python

tamaño de la matriz en javascript

tomemos algunos ejemplos para ver cómo funciona. Si se le da un entero positivo n, el factorial sería.



  • ¡norte! = n * (n-1) * (n-2) y así sucesivamente.
  • 2! = 2 * (2-1)
  • 1! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

Reemplazar los valores anteriores dará como resultado la siguiente expresión

  • 4! = 4 * 3 * 2 * 1

Tenemos que definir una función, digamos hecho (n) que toma un entero positivo o 0 como su parámetro y devuelve el enésimo factorial, ¿cómo podemos hacer eso usando la recursividad?

Veamos, para hacerlo usando la recursividad necesitamos examinar la siguiente ecuación



  • ¡norte! = n. (n-1). (n-2) & hellip3.2.1

  • ¡norte! = n. (n-1)! # podemos reescribir la declaración anterior como en esta línea

  • Ahora aquí, si pasamos 2 como parámetro, obtendremos:

    • 2! = 2.1! = 2

  • Del mismo modo, si pasamos 1 obtendremos:

  • Pero si pasamos 0, se rompe

    • 0! = 0. (- 1)! y aquí el factorial para -1 no está definido, por lo que esto solo funciona para valores> 0

  • Entonces tenemos que escribir dos casos

    • 1. n! = n. (n-1)! si n> = 1

    • 2. 1 si n = 0

Esta es una solución completa para todos los números enteros positivos y 0.

Condición de terminación

Una función recursiva tiene que cumplir una condición importante para terminar. Avanzando hacia una condición en la que el problema se puede resolver sin más recursividad, una función recursiva terminará, minimizando el problema en subpasos más pequeños. Una recursividad puede terminar en un bucle infinito si no se cumple la condición de terminación en las llamadas.

Condiciones factoriales:

  • factorial de n = n * (n-1) siempre que n sea mayor que 1.
  • 1 si n = 0

Convertiremos las condiciones factoriales anteriores en código Python:

def hecho (n): si n == 1: devuelve n else: devuelve n * hecho (n-1)

Tomemos un ejemplo, digamos que queremos encontrar factorial de 4:

fact (4) #this devolverá 4 * fact (3) y así sucesivamente hasta que n == 1.
 Salida: 24

Se utiliza con mucha frecuencia como ejemplo de recursividad debido a su simplicidad y claridad. Resolver instancias más pequeñas de un problema en cada paso se denomina recursividad en informática.

Límite de recursividad de Python

En algunos lenguajes, puede crear un bucle recursivo infinito pero, en Python, hay un límite de recursividad. Para verificar el límite, ejecute la siguiente función desde el módulo sys. que dará el límite de la recursividad establecida para Python.

importar sys sys.getrecursionlimit ()
 Salida: 1000

También puede cambiar el límite usando la función functionsetrecursionlimit () del módulo sys de acuerdo con sus requisitos. Ahora creemos una función que se llame a sí misma de forma recursiva hasta que exceda el límite y verifique lo que sucede:

def recursive (): recursive () if __name__ == '__main__': recursive ()

Si ejecuta el código anterior, obtendrá una excepción de tiempo de ejecución: RuntimeError: se superó la profundidad máxima de recursividad. Python le impide crear una función que termina en un bucle recursivo sin fin.

Acoplamiento de listas con recursividad

Otras cosas que puede hacer usando la recursividad, excepto los factoriales, digamos que desea crear un solo a partir de una lista que está anidada, se puede hacer usando el siguiente código:

def flatten (a_list, flat_list = none): si flat_list no es ninguno: flat_list = [] para el elemento en una_list: si es instancia (elemento, lista): aplanar (elemento, flat_list) else: flat_list.append (elemento) return flat_list if __name__ == '__main__': anidado = [1,2,3, [4,5], 6] x = aplanar (anidado) imprimir (x)
 Salida: [1,2,3,4,5,6]

La ejecución del código anterior dará como resultado una lista única en lugar de una lista de enteros que contiene la lista de enteros que usamos como entrada. También puede hacer lo mismo usando otras formas, Python tiene algo llamado itertools.chain () puede verificar el código usado para crear una función chain () es un enfoque diferente para hacer lo mismo que hicimos nosotros.

diferencia entre bigdata y hadoop

Ventajas de la recursividad

  • El código es limpio y elegante en una función recursiva.

  • Una tarea compuesta se puede dividir en subproblemas más simples mediante la recursividad.

  • Generar secuencia es más fácil con recursividad que usar alguna iteración anidada.

Desventajas de la recursividad

  • Seguir la lógica detrás de la función recursiva puede ser difícil a veces.

  • Las llamadas recursivas son caras (ineficaces) ya que ocupan mucha memoria y tiempo.

  • Las funciones recursivas son difíciles de depurar.

En este artículo vimos qué es la recursividad y cómo podemos desarrollar funciones recursivas a partir del enunciado del problema, cómo se puede definir matemáticamente un enunciado del problema. Resolvimos un problema del factorial y descubrimos las condiciones necesarias para encontrar factoriales a partir de los cuales pudimos convertir esas condiciones en código Python, lo que le brinda la comprensión de cómo funciona la recursividad. Creo que es genial que Python tenga un límite incorporado para la recursividad para evitar que los desarrolladores creen funciones recursivas mal construidas. Una cosa importante a tener en cuenta es que la recursividad es difícil de depurar ya que la función sigue llamándose a sí misma.