私のコードをプロファイリングしたところ、私のプログラムはこの特定の再帰関数を実行する時間の約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
@ jjnguyはいちょうどそれが更新される予定のサービスかもしれないことに気づいた。 –
@orgである可能性があります。 – jjnguy