斐波那契数列在 python 中有效,但在 c 中无效?

Fibonacci sequence works in python, but not in 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 的幂?

a, b = b, a + b

in python 将值 ba + b 打包成一个元组,然后将其解包回 ab.

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

表示用ba+b.

(同时)修改ab

在 C 中:

 a = b, b = a + b;

表示执行 a=b 然后在 b=a+b.

之后

你误会了comma operator

#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;
    }
}