我是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)
答案 0 :(得分: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);
}