-2

它工作正常,但我只是不确定它是如何工作的,有人可以解释一下吗?谢谢

public static int gcd(int a, int b) { 
  return b==0 ? a : gcd(b, a%b); 
}
4

4 回答 4

7

您有一个三元运算符 ( bool ? x : y)。这样的运算符将评估问号之前的语句。如果计算结果为true,则选择 x,否则选择 y。

这意味着它的逻辑等价于:

public static int gcd(int a, int b)
{ 
  if (b == 0)
      return a;
  else
      return gcd(b, a % b);
}

接下来,a % b计算两个数的模,即整数除法的余数a / b。例如:7 % 2结果114 % 5产量4

于 2013-09-01T13:35:24.767 回答
3

算法:http ://en.wikipedia.org/wiki/Greatest_common_divisor

句法:

return b==0? a :gcd(b, a%b)

方法

if(b==0)   
  return a; 
else   
  return gcd(b, a%b);
于 2013-09-01T13:33:46.743 回答
2

这是一种递归静态方法,计算两个数字的 gcd。

考虑这个方法的调用 -

int gcd = gcd(12, 6);

您的方法主体相当于 -

return 6==0 ? 12 : gcd(6, 12 % 6);

因为 6 不等于 0,所以gcd再次被调用。这一次,是这样的——

return 0 == 0 ? 6 : gcd(6, 0 % 6);

由于 0 == 0 为真,因此返回 6,这是12 和 6 之间的最大公约数。

于 2013-09-01T13:31:39.390 回答
1

找到最大除数是欧几里得算法的实现。它使用递归。

于 2013-09-01T13:33:48.877 回答