7


この関数を最適化して、入力値(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] から値を取得します。

4

1 に答える 1