我需要使用牛顿的方法,使用递归。我有一段使用迭代牛顿方法的代码,但是我对编程非常陌生,所以我无法思考如何将它转化为递归。我真的很想做一些视觉演示。
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);
}发布于 2021-12-12 20:28:23
通常我们想换一种方法,也就是消除递归。在尾部递归的情况下:
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看起来同样丑陋。delta_x好多了。pr也是。
https://stackoverflow.com/questions/70324693
复制相似问题