entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Evaluación de una función usando recursividad

Hola! Hace algunos días hice una pregunta sobre recursividad en Python.

Bueno, pues tengo otra pregunta sobre el mismo snippet de código.

¿Cómo se evalúa la función flatten(i) que está dentro de la definición?

def flatten(l):
ret = []
for i in l:
    if isinstance(i, list) or isinstance(i, tuple):
        ret.extend(flatten(i)) #Cómo se evalúa éste flatten(i)??
    else:
        ret.append(i)
return ret

Gracias por responder!

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola Arturo,

las funciones recursivas se evalúan de la misma manera que cualquier otra.

En este caso tu función recibirá como parámetro un arreglo bidimensional, y la función lo recorrerá, y al encontrar un arreglo, llamará de nuevo a la funcion, pero esta vez recibirá como parámetro el arreglo de una dimensión que es parte del arreglo principal

Para el ejemplo:

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

las llamadas quedarían así:

1) flatten([[1, 2, 3], [4, 5 ,6, [7, 8, 9]]])
2)    flatten([1, 2, 3])
3)   termina 2)
4)    flatten([4, 5 ,6, [7, 8, 9])
5)      flatten([7, 8, 9])
6)      termina 5)
7)   termina 4)
8) termina 1)

Es decir que si a una función recursiva la llamás con 10 elementos anidados, por un momento tendrás 10 instancias de la función ejecutándose cargadas en memoria.

Saludos!

1voto

arturo_balbuena comentado

Muy buena la forma de explicarlo, gracias!

3votos

juan_luis_cano Puntos1520

Para visualizar la ejecución de funciones, recomiendo Python Tutor:

0voto

arturo_balbuena comentado

Ya lo había probado, pero no sabía que podía introducir mi código! (que despistado soy) Muchísimas gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta