Fibonacci序列在python中工作,但不在c中?

时间:2017-06-06 15:45:42

标签: python c fibonacci

我有以下python代码:

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

它产生了这个: 1 1 2 3 五 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 个答案:

答案 0 :(得分:10)

a, b = b, a + b
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

答案 1 :(得分:3)

因为,在C和python中有不同的含义。在python:

a, b = b, a + b

表示使用相应的值ab修改ba+b(同时)。

在C:

 a = b, b = a + b;

表示执行a=b,然后执行b=a+b

答案 2 :(得分:0)

你误解了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;
    }
}