кодирование Фибоначчи и не-Фибоначчи - PullRequest
1 голос
/ 11 января 2012

Я прошу прощения, так как это может быть общий вопрос, но я думаю, что я ищу довольно конкретный ответ, который не будет найден в других темах. По сути, я довольно запутался в процессе добавления чисел. Вот два похожих кода, которые по-разному вычисляют числа. Есть ли простое объяснение этому?

>>> a = 0
>>> b = 1
>>> while b <1000:
    print b
        a, b = b, a+b


1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987

>>> a =0
>>> b=1
>>> while b<1000:
       print b
       a = b
       b = a+b


1,2,4,8,16,32,64,128,256,512

Ответы [ 3 ]

1 голос
/ 11 января 2012

В свопе есть разница в приоритетах. В первом примере вы назначаете: а = 1 b = 1

Во втором примере вы назначаете: а = 1 б = 2

Чтобы выполнить тот же порядок операций, что и в первом примере, вам нужно будет использовать временную переменную.

1 голос
/ 11 января 2012

Разница заключается в том, какие значения КОГДА меняются

a, b = b, a+b

устанавливает a в b и устанавливает a в a + b, но перестановки выполняются относительно одновременно, поэтомуэто не в порядке, то есть изменение в b не учитывает, что a было изменено первым.

Во втором примере

a = b

b = a+b

значения изменены, и 2-й оператор учитывает изменениепервого

0 голосов
/ 11 января 2012

Назначения происходят одновременно в первом примере кода и последовательно во втором, что приводит к другому ответу.

...