Learning Python 69
Learning Python 69

Reputation: 1

Fibonacci sequence multiplying

I tried to make the fibonacci sequence with the following code:

def fibonacci(n): # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a = 0
    b = 1
    the_list = []
    while n > len(the_list):
        the_list.append(a)
    #By saying a = b and b = a+b we define the
    #fibonacci sequence, since this is how the
    #fibonacci sequence works.
        a = b
        b = a+b
    print the_list
# Now call the function we just defined:
fibonacci(10)

As far as I know this code should do it but instead of giving me the fibonacci sequence its giving the following output:

[0, 1, 2, 4, 8, 16, 32, 64, 128, 256]

So my fibonacci sequence is multiplying instead of working correcly. I have no idea why because i thought

a = b
b = a+b

should do the trick, if i look at my while loop the statements for this loop are also correct, so I just dont get it why i dont get the right output.

So if someone could explain me why this code is not working it would be highly appriciated

Upvotes: 0

Views: 1732

Answers (1)

carloabelli
carloabelli

Reputation: 4349

Your code is creating an exponential sequence because of a logic flaw. Based on your code:

Start:
a = 0
b = 1

1st iteration:
a = b = 1
b = a + 1 = 1 + 1 = 2

2nd iteration:
a = b = 2
b = a + 2 = 2 + 2 = 4

As you can see the fact that you set a before performing the b calculation causes your issue.

Instead you need would something like (to prove the point):

tmp = a
a = b
b = tmp + a

A little extra math would eliminate the need for the extra variable:

b += a
a = b - a

But the easiest (and most pythonic) way would be:

a, b = b, a + b

Upvotes: 1

Related Questions