パラメータとして数値を受け取り、ビット(0,1)配列に n
正確に含まれるすべての可能な組み合わせを計算するメソッドがあり、返される結果は数値1の位置ですn 1
たとえば、ビット配列に3
要素があり、
for n = 1
the function gives : [0] - [1] - [2] (three possible positions)
for n=2
the result will be [0,1] - [0,2] - [1,2] (three possible positions)
n=3 の場合、結果は [0,1,2] (1 つの可能な位置) になります。
関数は 3 つの要素を持つ配列に対しては正しく機能しますが、4 つの要素に対しては間違った結果を返します
n = 2 result : [0,1] - [0,2] - [0,3] -[1,2] - [1,3] - [1,2,3]
配列サイズ>= 4で予期しない結果が得られる理由を説明できる人はいますか
前もって感謝します
const int arraySize = 4;
static private void Positions(int n, int start, ArrayList prepend, ArrayList results)
{
ArrayList tmp = new ArrayList(prepend);
int end = arraySize - n;
for (int i = start; i <= end; i++)
{
if (end < arraySize - 1)
{
prepend.Add(i);
Positions(n - 1, i + 1, prepend, results);
prepend = tmp;
}
else
results.Add(new ArrayList(prepend) { i });
}
}
これが私がメソッドを使用する方法です
static void Main(string[] args)
{
ArrayList results = new ArrayList();
Positions(2, 0, new ArrayList(), results);
foreach (ArrayList array in results)
{
foreach (var elem in array)
Console.Write(elem);
Console.WriteLine();
}
Console.Read();
}