gpt4 book ai didi

java - 带有递归的牛顿法

转载 作者:行者123 更新时间:2023-11-30 04:12:22 24 4
gpt4 key购买 nike

有人给我一个问题,我应该再次使用递归来解决。这是关于牛顿法的。该算法对于较小的数字工作得很好,但是当我给出较大的数字时,程序突然进入循环。

这是我对牛顿法的描述:

首先我被要求以 =x 开头

  1. 如果 |a*a-x|<= epsilon,则 a 是容差范围内 x 的平方根;否则
  2. 将 a 替换为 (a*a+x)/(2*a) 并重复步骤 1

这是我的代码:x 是我应该开平方根的数字,e 是容差

public static double sqrtR (int x, double e, int a) {

if (Math.abs(a * a - x) <= e) {
return a;
} else {
a = (a * a + x) / (2 * a);
return 1.0 *(sqrtR(x, e, a));
}
}

最佳答案

问题在于使用 int - 如果您的 epsilon 太小,程序会在两个值之间来回振荡。

例如,使用现在的函数 sqrtR(99999999,0.1,99999999) 最终会在 9999 和 10000 之间循环。将 int a 转换为 double a 可以让这停止疯狂。

public static double sqrtR (long x, double e, double a) {

if (Math.abs(a * a - x) <= e) {
return a;
} else {
a = (a * a + x) / (2 * a);
return 1.0 *(sqrtR(x, e, a));
}
}

关于java - 带有递归的牛顿法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300067/

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