我收到此代码的堆栈溢出错误:

问题描述 投票:0回答:1

我是java的新手,我不知道为什么这段代码会给出堆栈溢出错误。...

int lcm = 0;
public int a (int n1,int n2) {

     n1 = 6;
     n2 = 5;
    if(n1>n2) {
        lcm = n1;
    }
     else if(n2>n1) {
        lcm = n2;
    }
        if(lcm%n1 == 0 && lcm%n2 == 0) {
            lcm = lcm;            
        }
        else {
            ++lcm;
            a(6,5);
    }
    return (lcm);
}
 public static void main (String[] args) {

    ktm ob = new ktm();
    int ans = ob.a(6,5);
    System.out.println(ans);

}

我希望使用递归来计算两个数字的lcm,但它给了我这个错误消息:java.lang.StackOverflowError的在ktm.a(ktm.java:25)

java recursion
1个回答
0
投票

您始终将6和5作为输入发送给函数,这会使函数无限次地对该输入进行调用,因为if条件(lcm%n1 == 0 && lcm%n2 == 0)不能满足给定的输入。

  • 如果要使用递归来计算LCM,请尝试以下操作

    int gcd(int a, int b) 
    { 
    if (a == 0) 
        return b;  
    return gcd(b % a, a);  
    } 
    
    int lcm(int a, int b) 
    { 
        return (a*b)/gcd(a, b); 
    } 
    public static void main (String[] args) {
      ktm ob = new ktm();
      int ans = ob.lcm(6,5);
      System.out.println(ans);
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.