0

たとえば、n が 4 の場合、n1 + n2 = 4 です。n、n1、n2 >=0

出力は

[4, 0] [0, 4] [1, 3] [2, 2] [3, 1]

私は試した。

public static void partition(int n, int x, int y) throws Exception{
    int n1, n2;
    n1 = x; 
    n2 = y;
    System.out.println(n1 + " : " + n2);
    x = x - 1;
    y = y + 1;

    if ( x >= 0) {
        TestMethods.partition(n, x, y); 
    } else {
        return;
    }
}

上記のメソッドを TestMethods.partition(4, 4, 0); として呼び出しています。

この方法をより効率的にするために、この方法にどのような改善を加えることができるかを確認したいと思います。

4

3 に答える 3

0

たとえば、再帰を使用する必要がある場合、y パラメーターはまったく必要ありません。n から x を減算することで取得できるため、y = nx です。[3, 1] と [1, 3] のように値が重複しないように、x <= nx の場合は再帰を停止できます。

public static void partition(int n, int x) throws Exception{
int n1, n2;
n1 = x; n2 = n - x;
System.out.println(n1 + " : " + n2);
if ( n1 - 1 >= n2 + 1) {
TestMethods.partition(n, n1 - 1); 
} else {
    return;
}
}

また、一時変数 n1、n2 を削除することで、このコードをさらに単純化できます。

于 2013-09-05T10:09:30.700 に答える