此代码:
(int a,int b) = (1,0)
(a, m) = (m, a % m);
(x, y) = (y, x - q * y);
这有何不同:
int a=1;
int b=0;
a = m;
m = a%m;
x = y;
y = x-q*y;
为什么不一样? 您怎么用普通的方式写上没有括号?
答案 0 :(得分:2)
首先,在第一种情况下没有非正常现象。正如@MickyD所引用的,您应该阅读有关tuples的信息。这个版本更加简洁,所以我实际上更喜欢它。
更重要的是,这些代码段不相等。比较
(a, m) = (m, a % m);
vs
a = m;
m = a%m;
在第二种情况下,首先评估a
,这意味着m
最终将变成0
:
a = m; // now a equals m
m = a%m; // m := a % m = m % m = 0
在第一种情况下,元组的所有部分都是同时计算的(例如在Python中)。换句话说,就结果而言,它等效于以下代码:
int temp = a;
a = m;
m = temp % m;