此代码用于查找可被1到20的所有整数整除的最小数字 我不了解此代码如何在递归上工作,您能解释一下它会有所帮助吗?
static long gcd(long a, long b)
{
if(a%b != 0)
return gcd(b,a%b);
else
return b;
}
// Function returns the lcm of first n numbers
static long lcm(long n)
{
long ans = 1;
for (long i = 1; i <= n; i++)
ans = (ans * i)/(gcd(ans, i));
return ans;
}
// Driver program to test the above function
public static void main(String []args)
{
long n = 20;
System.out.println(lcm(n));
}
答案 0 :(得分:0)
这非常数学,但是gcd代表“最大公分母”,lcm代表“最低公倍数”。
主算法跟踪当前的最小公倍数“ ans”,并将“ i”从1迭代到“ n”,在这种情况下为20。然后将当前值乘以每个“ i”,然后除以“ ans”和“ i”之间最大的共同点。
gcd()方法使用Euclid's algorithm来计算最大公分母
算法起作用的原因更多地是https://math.stackexchange.com/的问题