es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Método de Newton iterativo a recursivo (Java)

Necesito usar el método de Newton usando la recursión. Tengo este fragmento de código usando el método de Newton iterativo, pero soy nuevo en la programación, así que no logro entender cómo convertirlo en recursivo. Agradecería mucho alguna demostración visual.

public static double f(double x){
    return x*x - 3.5*x*x + 0.5*x + 5;
}

public static double prf(double x) {
    return 3 * x * x - 7 * x + 0.5;
}

// CÁLCULO DE LA RAÍZ UTILIZANDO EL MÉTODO DE NEWTON

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);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para convertir el método de Newton iterativo en una función recursiva, es necesario definir un caso base y un caso recursivo.

    El caso base ocurre cuando la diferencia entre el nuevo y el antiguo valor de x es menor que la precisión deseada (e). En este caso, la función devuelve x.

    En el caso recursivo, la función se llama a sí misma con el nuevo valor de x como argumento hasta que se alcance el caso base.

    Aquí tienes una posible implementación:

    public static double newtonRecursivo(double x, double e) {
        double xn = x - f(x) / prf(x);
        if (Math.abs(xn - x) <= e) {
            return xn;
        } else {
            return newtonRecursivo(xn, e);
        }
    }
    

    En esta función, definimos xn como el nuevo valor de x calculado como en la versión iterativa. Luego comprobamos si la diferencia entre xn y x es menor o igual a e, y devolvemos xn si es así.

    Si la diferencia es mayor que e, la función se llama a sí misma con xn como el nuevo valor de x hasta que se alcance el caso base.

    Puedes llamar a esta función con los mismos parámetros que la versión iterativa:

    double raiz = newtonRecursivo(1.0, 0.0001);
    

    Esto calculará la raíz de f(x) comenzando desde x=1.0 con una precisión de 0.0001 utilizando el método recursivo de Newton.

Comments are closed.