需要解释循环的Java递归代码

时间:2019-05-26 17:30:24

标签: java

  

此代码用于查找可被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)); 

} 

1 个答案:

答案 0 :(得分:0)

这非常数学,但是gcd代表“最大公分母”,lcm代表“最低公倍数”。

主算法跟踪当前的最小公倍数“ ans”,并将“ i”从1迭代到“ n”,在这种情况下为20。然后将当前值乘以每个“ i”,然后除以“ ans”和“ i”之间最大的共同点。

gcd()方法使用Euclid's algorithm来计算最大公分母

算法起作用的原因更多地是https://math.stackexchange.com/的问题