Последовательность Fibonacci работает в python, но не в c?

У меня есть следующий код python:

a, b = 1, 1 for i in range(0, 100): print a a, b = b, a + b 

Он генерирует это: 1 1 2 3 5 8 и т. Д.

Я написал то же самое в c:

 #include <stdio.h> long long unsigned int a = 1, b = 1; void main(){ for(int i = 0; i < 100; i++){ printf("%llu \n", a); a = b, b = a + b; } } 

Он генерирует это: 1 1 2 4 8 16 32 и т. Д.

Почему программа c генерирует полномочия 2, когда она использует одни и те же операции?

    3 Solutions collect form web for “Последовательность Fibonacci работает в python, но не в c?”

     a, b = a, a + b 

    в python упаковывает значения b и a + b в кортеж, затем распаковывает его обратно в a и b .

    C не поддерживает эту функцию, а использует запятую для разделения между назначениями, поэтому a = b, b = a + b переводятся как

     a = b; b = a + b; 

    где b удваивается каждый раз, потому что назначение не является одновременным.

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

     b = a + b; a = b - a; // a + b - a = b 

    Потому что имеет разные значения в C и python. В python:

     a, b = b, a + b 

    означает изменение a и b (одновременно) с соответствующими значениями b и a+b .

    В то время как в C:

      a = b, b = a + b; 

    означает a=b а затем после b=a+b .

    Вы неправильно понимаете запятую .

     #include <stdio.h> #include <inttypes.h> #include <stdint.h> int main(void) { uintmax_t a = 1, b = 1; for (int i = 0; i < 100; i++) { printf("%" PRIuMAX "\n", a); b = a + b; a = b - a; } } 
    Python - лучший язык программирования в мире.