我运行了下面的代码,我认为它是正确的。然而,它只是不断返回堆栈溢出。当我在 Debug模式下运行它时,我注意到函数 x%y 中以某种方式返回 y 而不是应该为 0 的余数。有人可以帮忙看看这是为什么吗?
public class test
{
public static void main (String [] args)
{
System.out.println(gcd(50,10));
}
static double gcd(double x, double y)
{
if (x > y)
{
return gcd(y, x);
}
else if (y <= x && x%y == 0)
{
return y;
}
else
{
return gcd(y, x%y);
}
}
}
最佳答案
从技术上讲,该实现会导致堆栈溢出,因为对于参数 50
和 10
,递归调用交替到达第一个和最后一个情况,从而导致无限递归。显然,确定最大公约数的算法执行不正确;可以找到它的详细介绍here 。话虽如此,使用 double 类型执行计算可能不是一个好主意;我怀疑除法余数运算符 %
由于四舍五入的缘故,其行为是否符合预期。
关于java - 递归公式不断返回堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46281452/