Python - Recursividad

 
Vista:

Recursividad

Publicado por ivan (26 intervenciones) el 19/07/2023 21:22:52
Estoy aprendiendo sobre recursividad en Python. Entiendo que para esto, la idea es que pensar un caso base , que sea simple de resolver y luego el paso recursivo que llama a la misma función pero ya con el problema mas pequeño, y que este se va a ir acercando al caso base. Pero antes de el paso recursivo tiene que estar pensada una condición , que cuando se cumpla el programa se detenga y me retorne el resultado esperado , sin continuar en una recursividad infinita. Entiendo algunos ejemplos con el de cuenta regresiva u algunos otros ejemplos, pero no estoy lográndolo con este ejercicio de listas. Agradecido de orientacion sobre como pensar para resolver esto y armar el codigo. Gracias.

Tienes una lista de listas. Cada lista interior contiene listas o strings. Por ejemplo, la lista se podría ver de la siguiente forma:

1
2
3
4
lista = [
          [['a'], ['b', 'c']],
          ['d', ['e']]
]
Deberás definir la función recursiva en_orden(lista, ordenada), la cuál recibe como parámetro una lista en el formato anterior y una lista vacía. La función deberá llenar la lista ordenada de la siguiente manera:

Primero se debe agregar (append) a ordenada , la lista recibida, y luego deben agregarse a continuación cada una de las listas dentro de lista.

1
2
3
4
5
lista =  [['a'], [['b'], 'c']]
ordenada = []
en_orden(lista, ordenada)
for x in ordenada:
    print(x)


Deberá imprimir:

[['a'], [['b'], 'c']] ['a'] [['b'], 'c'] ['b']

Ayuda: La instrucción type(x) retorna el tipo de la variable x. Por ejemplo, para saber si una variable es del tipo str, puedes hacer la comparacion type(x) == str. Lo mismo se puede hacer con el tipo list.

Esto es lo que estoy intentando entre otros intentos , pero no estaría funcionándome.

1
2
3
4
5
6
7
8
9
def en_orden(lista, ordenada):
    ordenada=[]
    ordenada.append(lista)
    for x in ordenada:
        if type(x)== list:
            print(x)
            en_orden(lista[1:], ordenada)
        else:
            return ordenada.append(lista[0])
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recursividad

Publicado por Costero (92 intervenciones) el 20/07/2023 05:31:31
Tu funcion tiene varios problemas.
El primero estas seteando el valor de ordernada otra vez a empty array.

Qutia esto:
1
ordenada=[]

En segundo cuando estas haciendo recursion no deberias de utilizar for loop. Imaginemosnos que Python es solo un lenguage funcional donde not existen loops solo puedes utilizar recursion.

Si quieres mi codigo de solucion me avisas.



Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad

Publicado por ivan (26 intervenciones) el 20/07/2023 20:43:49
Hola . Entendido. Tu orientación me ayudo a resolver . Si, a mi me hace ruido el for en este ejercicio , ya que la idea es evitar los for y reemplazar las iteraciones por la recursividad , pero bueno, lo voy resolviendo . Gracias por ofrecer tus códigos . Lo resolví con for , pero no me gusta de todas maneras como quedo . Tengo mas para hacer asique gracias por la orientación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar