この関数を最適化して、入力値(x = 300、y = 120、z = 10)をすばやく出力できるようにしたいと考えています。
連続して計算した後、値を 3D 配列に格納することを考えましたが、それを実装できませんでした。
助けてください。再帰は理解するのが難しすぎる!
double P(int x, int y, int z) {
double final;
if (x >= 0 && (y <= 0 || z <= 0))
return 0;
else if (x <= 0 && (y >= 0 || z >= 0) )
return 1;
else {
final = 0.1 * (P(x,y-1,z)
+ P(x-1,y-1,z)
+ P(x-2,y-1,z)
+ P(x-3,y-1,z)
+ P(x-4,y-1,z)
+ P(x-5,y-1,z)
+ P(x-6,y-1,z)
+ P(x-1,y,z)
+ P(x-1,y,z)
+ P(x,y-1,z-1));
return final;
}
}
関数を計算するにP (300, 120, 10)
は、x、y、z のすべての可能な組み合わせを計算する必要が0 <= x <= 300
あり0 <= y <= 120
ます0 <= z <= 10
。最初に3D配列を作成することを考えました。それぞれの arr[x][y][z] が空の場合、関数を呼び出します。それ以外の場合は、arr[x][y][z] から値を取得します。