gerdm / python_uma

Repositorio de código para clases de Python impartidas en la Universidad Marista
0 stars 16 forks source link

Pregunta extra01:e5 #9

Open VictorMich opened 6 years ago

VictorMich commented 6 years ago

Al correr mi programa, me aparecen al menos los primeros 3 dígitos de la sucesión de fibonacci correctos, pero al agregar los demás, me aparecen listas de números dentro de la lista inicial que tengo y no entiendo el porqué; mi código es el siguiente:

def fibonacci(a):
    lista_fibonacci=[]
    for g in range(1,a+1):
        if g==1:
            F1=0
            lista_fibonacci.append(F1)
        elif g==2:
            F2=1
            lista_fibonacci.append(F2)
        elif g>2:
            FN=fibonacci(g-1)+fibonacci(g-2)
            lista_fibonacci.append(FN)
    return lista_fibonacci

Yo creo que el error estaría en:

elif g>2:
    FN=fibonacci(g-1)+fibonacci(g-2)
    lista_fibonacci.append(FN)

¿Algún hint para poder arreglarlo? Gracias.

gerdm commented 6 years ago

Hola @VictorMich.

Justamente, el bug está dentro de la condición elif g > 2. Si corro tu función con a = 3 obtenemos lo siguiente:

In [1]: fibonacci(3)
Out[1]:[0, 1, [0, 1, 0]]

Para entender por qué, considera que pasa cuando

Tu lista final lista_fibonacci tendrá tres elementos: 0, 1 y la lista [0, 1, 0]


Lo que te recomiendo hacer un for loop. Los primeros dos elementos de la secuencia ya los conocemos por lo que podemos inicializar lista_fibonacci = [0, 1]. Para los siguientes a- 2 elementos considera que el el elemento siguiente de la lista será la suma de los últimos dos elementos dentro de lista_fibonacci, i.e. el elemento n+1 dentro de la lista sería igual a lista_fibonacci[-1] + lista_fibonacci[-2]. De esta manera, no ocupas un if-statement y solo te encargas de considerar los últimos dos elementos de la lista y agregar un nuevo elemento.

Espero haya quedado un poco más claro con esto

VictorMich commented 6 years ago

Claro, ya quedó mi función. ¡Gracias!