今天我在复习扩展欧几里德算法的时候,无意中发现了一个代码库,它可以做到这一点:
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
ll euclid(ll a, ll b, ll &x, ll &y) {
if (!b) {
return x = 1, y = 0, a;
}
ll d = euclid(b, a % b, y, x);
return y -= a / b * x, d;
}
我很好奇返回类型是long long
,从我最初的搜索来看,在c++的多逗号返回中,只有正确的值被保留和返回,所以问题是,为什么这个函数的作者仍然希望在同一个返回行的左手边是x = 1, y = 0
或y -= a / b * x
?
1条答案
按热度按时间dgiusagp1#
该回流管
确实只通过返回值true返回
d
。然而,它也更新两个参考参数
x
和y
,这可以看作是价值回归的一部分。
它可以在前面的行中完成。
这将避免作者试图返回多个值的错误印象,正如您正确提到的,C++不支持这一点。