gpt4 book ai didi

java - 递归方法的间歇性堆栈溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:14 24 4
gpt4 key购买 nike

我有一个我为类作业编写的简单方法,它使用递归(是的,它必须使用递归)来计算分形图案中三角形的数量:

public static BigInteger triangleFract(int layer) {
if(layer < 0) {
throw new IllegalArgumentException("Input must be >= 0");
} else if(layer == 0) {
return new BigInteger("0");
} else if (layer == 1) {
return new BigInteger("1");
} else {
return triangleFract(layer - 1)
.multiply(new BigInteger("3"))
.add(new BigInteger("2"));
}
}

我一直试图做的是了解 int 层可以有多大以限制用户输入。经过一些测试后,我在 6700+ 左右出现堆栈溢出,这很好。

困扰我的是,如果层数在几千,该方法通常会运行,但它仍然会随机遇到一个StackOverflowError

例如,我选择将 layer 限制为 4444,它似乎几乎总是能够处理这个问题,但偶尔它似乎仍然会溢出。

为什么要这样做?我能做些什么吗?

最佳答案

也许 JVM 已经确定(通过逃逸分析)BigInteger 可以分配在堆栈上而不是堆上。根据何时实现此优化,所需的堆栈大小会有所不同。

也就是说,可能还有许多其他原因,并且行为很可能取决于您使用的 JVM。

关于java - 递归方法的间歇性堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com