我需要使用遞回來使用牛頓的方法。我有一段使用迭代牛頓法的代碼,但我對編程很陌生,所以我無法解決如何將其轉換為遞回的問題。我真的很感激一些視覺演示。
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);
}
uj5u.com熱心網友回復:
通常我們想反其道而行之,即消除遞回。在尾遞回的情況下:
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://www.uj5u.com/net/383339.html
