我对我的代码进行了剖析,发现我的程序花费了大约85%的时间来执行这个特定的递归函数。该函数旨在计算在给定初始位置(x,y)的情况下在马尔可夫链中达到一组状态的概率。花时间运行的递归函数
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);
}
}
有人告诉我99%的递归函数可以被while循环替换。尽管如此,我仍然遇到了麻烦。有谁知道我可以如何提高执行时间或将其重写为迭代循环?
感谢
@org,他已经接受了答案。我认为这可能是一个错误? – jjnguy 2010-12-10 16:16:00
@jjnguy是刚刚注意到,可能是服务计划更新。 – 2010-12-10 16:17:23
@org,可能是。 – jjnguy 2010-12-10 16:18:08