简体   繁体   中英

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM