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

标签 java stack-overflow

我运行了下面的代码,我认为它是正确的。然而,它只是不断返回堆栈溢出。当我在 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);
        }
    }
}

最佳答案

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

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

相关文章:

java - 在底部导航栏中,即使我选择了该图标,该图标也没有突出显示。如何更改它?

asp.net - 使用 WinDbg 和 ADPlus 帮助捕获 StackOverflowException

java - 获取 "Exception in thread "main"java.lang.StackOverflowError"和很多错误

c - 堆栈溢出(shellcoders 手册)

java - 如何在给定方法内对 querydsl 查询进行单元测试?

java - 缺少多个 IF 的 return 语句

java - 打开终端窗口客户端

java - 通过 ASM 跟踪方法依赖关系

haskell - 为什么这个 Haskell 代码会产生堆栈溢出?

java - 当抛出 StackOverflowError 时,Java 堆栈会发生什么?