我正在寻找用于计算2个数字的gcd的简单代码,并且遇到了这个有效的代码
ll gcd(ll a, ll b){
return b ? gcd(b,a%b):a;
}
我试图让这段代码正常工作
ll gcd(ll a, ll b){
return a ? gcd(a%b,b):b;
}
无论我做什么,我都无法使第二个代码块工作。我的理由很简单,无论我如何开始,我都应该能够获得GCD。有人可以帮我理解我哪里错了吗?
答案 0 :(得分:1)
如果您要交换a
和b
,您必须做两件事:
a
替换为b
,将每个b
替换为a
gcd
。你已经部分完成了。你需要做的是:
return a ? gcd(b%a, a):b;
您拥有的内容会产生无限递归。例如,如果使用修改后的函数调用gcd (12, 8)
,则这是您在每次迭代时获得的结果:
a = 12, b = 8
a = 4, b = 8
a = 4, b = 8
a = 4, b = 8
...