Skip to content
Advertisement

What am doing wrong in this piece of fibonacci code in python docs vs my re implementation?

Python docs:

>>> def fib(n):
    a,b=0,1
    while a<n:
        print a,
        a,b=b,a+b

>>> fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

My reimplementation:

>>> def fib2(n):
    a=0
    b=1
    while a<n:
        print a
        a=b
        b=a+b

>>> fib2(2000)
0
1
2
4
8
16
32
64
128
256
512
1024

Advertisement

Answer

The difference between

a,b=b,a+b

and

a=b
b=a+b

is that in the second one, a is assigned value of b, and then b is assigned the sum of a and b, which means it is twice its original value.

Consider:

a = 1
b = 2
a,b = b,a+b

This gives

a==2 (old value of b)
b==3 (sum of 1 and 2)

Contrarily:

a = 1
b = 2
a = b
b = a + b

which gives:

a==2 (old value of b)
b==a+b==2+2==4 (twice the old value of b)
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement