Java 递归公式不断返回堆栈溢出

Java 递归公式不断返回堆栈溢出,java,stack-overflow,Java,Stack Overflow,我已经运行了下面的代码,我认为它是正确的。然而,它只是不断返回堆栈溢出。当我在调试模式下运行它时,我注意到在函数中,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)

我已经运行了下面的代码,我认为它是正确的。然而,它只是不断返回堆栈溢出。当我在调试模式下运行它时,我注意到在函数中,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);
        }
    }
}
公共类测试
{
公共静态void main(字符串[]args)
{
系统输出打印项数(gcd(50,10));
}
静态双gcd(双x,双y)
{
如果(x>y)
{
返回gcd(y,x);
}

否则如果(y从技术上讲,实现会导致堆栈溢出,因为对于参数
50
10
而言,递归调用交替到达第一个和最后一个案例,导致无限递归。显然,确定最大公因子的算法实现不正确;一个精心设计的实例也就是说,使用double类型执行计算可能不是一个好主意;我怀疑除法余数运算符
%
由于舍入而会像预期的那样工作。

只是出于兴趣,什么是gcd?显然它是的缩写。正确,它是的缩写最大公约数