我运行了以下代码,我认为它是正确的。但是,它只会不断返回堆栈溢出。当我在调试模式下运行它时,我注意到函数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/