斐波那契数列在 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 将值 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
表示用b
和a+b
.
(同时)修改a
和b
在 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;
}
}
我有以下 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 将值 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
表示用b
和a+b
.
a
和b
在 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;
}
}