不知道如何描述这行代码

时间:2013-09-01 13:29:29

标签: java

它工作正常,但我不确定它是如何工作的,任何人都能解释一下吗?感谢

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

4 个答案:

答案 0 :(得分:7)

您有一个三元运算符(bool ? x : y)。这样的操作员将评估问号前的陈述。如果评估为true,则将选择x,否则为。

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

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

答案 1 :(得分: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);

答案 2 :(得分:2)

这是一个 recursive 静态方法,它计算了两个数字的gcd。

考虑这种方法的调用 -

int gcd = gcd(12, 6);

您的方法体等同于 -

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

因为6不等于零,所以再次调用gcd。这一次,就像这样 -

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

并且因为0 == 0为真,所以返回6,即{6}之间的greatest common divisor

答案 3 :(得分:1)

实现euclids算法以找到最大的除数。它使用递归。