現在、私はこのコードスニペットを持っています。いくつかのオブジェクトがあれば、それらの間に可能なすべての組み合わせが作成されます。combinatoryハードコードスニペットを再帰関数にするにはどうすればいいですか?
この例では、4つのオブジェクト(0,1,2,3)があると想定して、4つのオブジェクトのすべての可能な組み合わせが作成されます(0,1,2,3,1 )、02,03,12,13,23,012,013,023,123及び0123)を含む。
注意しなければならないのは、2^4 - 1 = 15の組み合わせであり、一般に2 ^オブジェクトの数 - 1の組み合わせです。
このコードで作成されるオブジェクトの順序は、0 - > 01 - > 012 - >- > 013 - > 02 - > 023 - > 03 - > 1 - > 12 - > 123 - > 13 - > 2 - > 23 - > 3
最初のオブジェクトを取得する方法とその数は、コード内の他の場所で定義されています。また、最大値を決定するオブジェクトの数(と、右の結果を与えているにもかかわらず
int count = 4; //this is gotten elsewhere
int currPos = 0;
var objects = new Object[(2^count)-1];
for (int i = 0; i < count; i++) //loop that creates combinations of only one object
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
for (int j = i + 1; j < count; j++) //loop that creates combinations of two objects
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
for (int k = j + 1; k < count; k++) //loop that creates combinations of three objects
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
for (int l = k + 1; l < count; l++) //loop that creates combinations of four objects
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
}
}
}
}
が、これはハードコーディングされているので、私は再帰関数にそれを変更する方法を探しています(ただし、その機能をmaintainig)組み合わせ、この例では4つ)をパラメータとして渡します。
私は例が0123から013int count = 4;
int currPos = 0;
var objects = new Object[(2^count)-1];
combinations(count, 0, currPos, objects); //called elsewhere
private void combinations(int numberOfObjects, int j, int count, int currPos, Object[] objects)
{
if (numberOfObjects == count)
{
for (int k = j; k < count; k++)
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
generateCombinations(numberOfObjects - 1, j + 1, count, currPos, objects);
}
}
if (numberOfObjects < count)
{
for (int l = j; l < count; l++)
{
Object obj = new Object(...);
objects[currPos] = obj;
currPos += 1;
(...)
generateCombinations(..., ..., count, currPos, objects);
}
}
}
に行く、私は必要なときに「前」のループに行くように見えることはできません主な理由は、以下のコードのような何かをしようとしているが、結果なしとされている
驚きの[検索](https://www.bing.com/searchことを?q = c%23%20all%20combinations)既存の解決策が見つかりませんでした... [this](http://stackoverflow.com/questions/774457/combination-generator-in-linq)のように –
'generateCombinations'別の機能やスペルミス? – Groo