Ir directamente al contenido
11/08/2023 / José Quintás Alonso

Recursividad(1)

Cómo escribió alguien: «Lo primero para entender la recursividad, es entender la recursividad«

Veamos un ejercicio al respecto.

Copiar, pegar, ejecutar, observar… ¡La CPU eres tú!

«»»
Created on Fri Oct 6 20:45:38 2023
Dada una lista de enteros, que a su vez pueden estar formando listas: aplanar la lista; ej:
de: [1, [2, 3], [4, [5, 6, [7, [8, [[[[[9,45]]]], 10, 11]]]]]]
obtener:[1, 2, 3, 4, 5, 6, 7, 8, 9, 45, 10, 11]
@author: Juan Monroy Camafreita, de https://academia.codigopiton.com/
«»»

def aplanar_lista(lista): # algoritmo recursivo

plana = []

for elemento in lista:
    if type(elemento) != list:  
        plana.append(elemento)
    else:
        plana.extend(aplanar_lista(elemento))  # llamada recursiva

return plana

lista = [1, [2, 3], [4, [5, 6, [7, [8, [[[[[9,45]]]], 10, 11]]]]]]
print(aplanar_lista(lista))

Adjunto una sucinta explicación o algo parecido:

«»»
Created on Mon Nov 6 10:35:18 2023
«»»

def aplanar_lista(lista): # algoritmo RECURSIVO

plana = []
# Ha de comprenderse que el for elemento in lista PROFUNDIZA un nivel cada iteración
for elemento in lista:

    print('Elemento>>',elemento, 'Tipo de ese elemento',type(elemento))
    if type(elemento) != list:  # caso base: si no es list: es natural: añadir a plana
        print('Está en el IF',elemento)
        plana.append(elemento)
    else:
        print('Está en el Else',elemento)  #Si es lista es que está anidada, llamar recursivamente
        plana.extend(aplanar_lista(elemento)) # llamada recursiva

return plana

‘Primero hay que comprender que hace type’
a= ‘La luna llena es preciosa’
b= 34
c=[2,3]
d=(1,2,3)
print(type(a))
print(type(b))
print(type(c))
print(type(d))
‘Luego hay que comprender que hace append’
plana = []
plana.append (13)
print(plana)
‘En tercer lugar hay que comprender que hace extend’
plana.extend([[5,67]])
print(plana)

‘Ahora vamos a ver como se aplana la lista siguiente de seis elementos’
lista = [125,[[[2, 3]]],9] #lista de naturales : debe de dar: [125,2,3,9]
print(aplanar_lista(lista))
‘Podríamos utilizar la lista original u otra:lista = [1, [2, 3], [4, [5, 6, [7, [8, [[[[[9,45]]]], 10, 11]]]]]]’

(Nota.- ¿Cómo resolver el problema sin recursividad?)