迭代牛顿法递归(Java)

Iterative Newton's Method to recursive (Java)

我需要通过递归来使用牛顿法。我有这段代码使用迭代牛顿法,但我对编程很陌生,所以我不知道如何将它变成递归。我非常感谢一些视觉演示。

public static double f(double x){ 
    return x*x*x-3.5*x*x+0.5*x + 5;
}
public static double prf(double x) { 
    return 3 * x * x - 7 * x + 0.5;
}
// ВЫЧИСЛЕНИЕ КОРНЯ МЕТОДОМ НЬЮТОНА
public static double x_newton(double a, double e) {
    double x = a; 
    double razn;
    do {
        double xn = x - f(x) / prf(x); 
        razn = Math.abs(xn - x); 
        x = xn; 
    } while (razn > e); 

    return x - f(x)/prf(x); 
}

通常我们想反其道而行之,即消除递归。如果是尾递归:

func(arguments) {
    if (condition) {
        return something(arguments)
    }
    arguments = modify_arguments(arguments)
    return func(arguments)
}

有一个机械重写:

func(arguments) {
    while (!condition) {
        arguments = modify_arguments(arguments)
    }
    return something(arguments)
}

现在只需要反向应用即可。


也就是说,while (razn > e) 不是终止循环的可靠方法。如果导数很大,它可能会过早终止,远离根。

此外,使用英文作为标识符。 razn 俄语和英语看起来同样难看 reader。 delta_x 好多了。 pr.

同上