它工作正常,但我不确定它是如何工作的,任何人都能解释一下吗?感谢
public static int gcd(int a, int b) {
return b==0 ? a : gcd(b, a%b);
}
答案 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
会产生1
,14 % 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算法以找到最大的除数。它使用递归。