Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pregunta extra01:e5 #9

Open
VictorMich opened this issue Oct 7, 2018 · 2 comments
Open

Pregunta extra01:e5 #9

VictorMich opened this issue Oct 7, 2018 · 2 comments

Comments

@VictorMich
Copy link

VictorMich commented Oct 7, 2018

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
Copy link
Owner

gerdm commented Oct 7, 2018

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

  • g == 1: En este caso, se cumple la primera condición y agregamos a nuestra lista de fibonacci un 0(tu primer elemento)
  • g == 2: se cumple la segunda condición y agregamos a nuestra lista de fibonacci un 1. En este momento lista_fibonacci == [0, 1]
  • g == 3: se complica un poco el programa; la tercera condición es verdadera y guardamos una variable FN = fibonacci(g - 1) + fibonacci(g - 2). En este caso, tenemos que preguntarnos quién es fibonacci(3 - 1) y fibonacci(3 - 2).
    • Para el primer caso (fibonacci(2)), se corre nuevamente la función que declaraste con a = 2. Si vemos el resultado de fibonacci(2), el resultado es [0, 1]
    • para el segundo caso (fibonacci(1)), sucede lo mismo considerando a = 1. El resultado es [0]
    • entonces: FN = fibonacci(3 - 1) + fibonacci(3 - 2) == [0, 1] + [0] == [0, 1, 0], pues + para dos listas es una concatenación.

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
Copy link
Author

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

@gerdm gerdm changed the title Pregunta extra01 ejercicio 5. Pregunta extra01:e5 Oct 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants