Hice un perfil de mi código y descubrí que mi programa pasó aproximadamente el 85% del tiempo ejecutando esta función recursiva en particular. La función tiene como objetivo calcular la probabilidad de alcanzar un conjunto de estados en una cadena de markov, dada una posición inicial (x, y).Recursive function taking ages to run
private static boolean condition(int n){
int i = 0;
while (n >= i){
if(n == i*4 || n == (i*4 - 1))
return true;
i++;
}
return false;
}
public static double recursiveVal(int x, int y, double A, double B){
if(x> 6 && (x- 2 >= y)){ return 1;}
if(y> 6 && (y- 2 >= x)){ return 0;}
if(x> 5 && y> 5 && x== y){ return (A*(1-B)/(1 -(A*B) - ((1-A)*(1-B))));}
if(condition(x+ y)){
return (recursiveVal(x+1, y,A,B)*A + recursiveVal(x, y+1,A,B)*(1-A));
}
else{
return (recursiveVal(x+1, y,A,B)*(1-B) + recursiveVal(x,y+1,A,B)*B);
}
}
Una vez me dijeron que el 99% de las funciones recursivas podrían reemplazarse por un ciclo while. Sin embargo, estoy teniendo problemas para hacer esto. ¿Alguien sabe cómo podría mejorar el tiempo de ejecución o reescribir esto como un ciclo iterativo?
Gracias
@org, ha aceptado las respuestas. Creo que podría ser un error? – jjnguy
@jjnguy, sí, acabo de notar que es posible que el servicio esté programado para actualizarse. –
@org, eso podría ser. – jjnguy