Open VictorMich opened 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
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)
.
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]
fibonacci(1)
), sucede lo mismo considerando a = 1
. El resultado es [0]
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
Claro, ya quedó mi función. ¡Gracias!
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:
Yo creo que el error estaría en:
¿Algún hint para poder arreglarlo? Gracias.