⊗pyPmFnRe 24 of 129 menu

Recursión en Python

En programación, existe un concepto llamado recursión - cuando una función se llama a sí misma.

Ejemplo . Recursión simple con contador

Mostremos números del 1 al 10 usando recursión:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # aquí la función se llama a sí misma func()

Analicemos cómo funciona este código.

Tenemos una variable global i y una función func, dentro de la cual se muestra en la consola el contenido de la variable i, y luego se le suma uno.

Si nuestra variable i es menor o igual a 10, entonces la función se llama nuevamente. Dado que la variable i - es global, en cada nueva llamada de la función, contendrá el valor de la variable i establecido en la llamada anterior.

Resultará que la función se llamará a sí misma hasta que i sea mayor que 10.

Tenga en cuenta que en nuestro caso no se puede ejecutar la función sin if - si se hace esto, se producirá una llamada infinita de funciones.

Ejemplo . Recursión para mostrar elementos de listas anidadas

Más a menudo, las recursiones se aplican para recorrer listas de diferentes niveles de anidamiento. Supongamos que tenemos la siguiente lista:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Creemos una función que la recorra. En ella, primero es necesario establecer una condición para que el elemento, que es un primitivo, es decir, simplemente un número extraído de la lista, se muestre en la consola. Y si el elemento es un objeto complejo, por ejemplo, una lista anidada, entonces en este caso que la función se llame a sí misma, es decir, ocurra una recursión. Para verificar el tipo de elemento, usemos la función isinstance. Solo que para nuestro ejemplo, en el primer parámetro de isinstance escribiremos el, y el segundo - el tipo list:

def func(lst): for el in lst: if isinstance(el, list): func(el) else: print(el)

Al llamar a la función, se mostrará una serie de todos los números de la lista anidada:

func(lst) # mostrará 1, 2, ... 8, 9

Ejemplo . Recursión para operaciones con elementos de listas anidadas

Las recursiones también se pueden aplicar para varias operaciones con elementos de listas anidadas. Supongamos que tenemos la siguiente lista:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Obtengamos la suma de todos sus elementos. Para ello, declaremos en la función una variable res, en la que se acumulará la suma de los números. En la condición, especificaremos que si el elemento es un objeto complejo, entonces pasa como parámetro a la función func y se suma a la suma. Esto significa que el elemento estará en recursión hasta que se convierta en un primitivo. Y en ese caso, simplemente se sumará al valor acumulado en res:

def func(lst): res = 0 for el in lst: if isinstance(el, list): res += func(el) else: res += el return res

Llamemos a la función y mostremos su resultado en la consola:

print(func(lst)) # mostrará 45

Ejemplo . Recursión para acumular en una lista

Usando recursión, se pueden descomponer listas anidadas en una lista unidimensional. Supongamos que tenemos la siguiente lista:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Especifiquemos en la función una lista vacía res, en la que se acumularán los elementos de la lista original. Luego iniciemos un ciclo y establezcamos una condición: si el elemento es una lista, entonces pasará al método extend. Este método une los elementos de una lista al final de una segunda lista, es decir, los elementos de la lista anidada pasarán al final de la lista res:

def func(lst): res = [] for el in lst: if isinstance(el, list): res.extend(func(el)) else: res.append(el) return res print(func(lst))

El resultado del código ejecutado:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Tareas prácticas

Muestre todos los elementos numéricos de un diccionario de nivel de anidamiento arbitrario:

{ 'a': { 'b': 1, 'c': 2, 'd': { 'e': 3, 'f': 4 } }, 'j': { 'h': 5, 'k': 6, }, 'l': 7 }

Encuentre la suma de los elementos del diccionario de la tarea anterior.

Obtenga una lista de los elementos primitivos del diccionario de la tarea anterior.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar