gpt4 book ai didi

java - 递归方法堆栈溢出错误

转载 作者:行者123 更新时间:2023-12-01 18:52:54 24 4
gpt4 key购买 nike

在我的代码中,我只是想编写一个简单的程序,告诉您一个数字是否可以整除另一个数字(在本例中该数字是 3)。现在我说的是,如果 x (该数字不能被整除,则添加 0.01,这会给我带来堆栈溢出错误。如果我将值设置为 0.2,则表示 9 可以被 3 整除,而实际上下一个数字可以整除三进三后是6

public class divisible {

public static void divide(double x) {
double three = 3;
double value = x%three;

if (value==0) {
System.out.println(x + " is a divisible of 3 ");
return;
}else{
//System.out.println("x does not divide evenly into 3");
divide(x+(.01));
}

}

public static void main(String args[]) {
divide(4);
}
}

最佳答案

递归无限的原因有点模糊:0.1 无法用 double 精确表示。当您将 0.13 相加十次时,您不会得到 4 - 您得到的数字很接近到4,但比它大一点。该数字不能均匀地划分您的目标,因此递归会继续到 4.14.2 等,永无止境。

原因与此循环永不停止的原因相同( try it! ):

for (double x = 3 ; x != 4 ; x += 0.1) {
System.out.println(x);
}

使用BigDecimal代替 double 可以解决这个问题,因为 0.1 会被准确地表示。当然,它仍然会打印错误消息(“可被 3 整除” 是硬编码的,即使 x 在调用中可能是完全不同的数字,当余数为零)。

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

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