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

最佳答案

从技术上讲,该实现会导致堆栈溢出,因为对于参数5010而言,递归调用交替地到达第一种和最后一种情况,从而导致无限递归。显然,确定最大公因数的算法没有正确实现;可以在here中找到其详细说明。话虽如此,使用double类型执行计算可能不是一个好主意;由于四舍五入,我怀疑除法余数运算符%是否会按预期运行。

关于java - 递归公式不断返回堆栈溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46281452/

10-12 02:38