tmpElements.Add(val); //把这个可选元素存放到临时数组,循环结束后一并恢复到elements数组中 if (sub > 1 || (elements.Count + 1 == m && elements.Count > 0)) //递归条件为 子组合数大于1 或 可选元素个数+1等于当前目标选择元素个数且可选元素个数大于1 Combination(ref reslut, elements, m - 1, x + 1, y); } elements.InsertRange(0, tmpElements); //一次性把上述循环删除的可选元素恢复到可选元素数组中 }
/// /// 返回由Index指定的可选元素值,并在数组中删除之,再从y行开始在x列中连续写入subComb个值 /// private static int RemoveAndWrite(ArrayList elements, int index, ref int[, ]reslut, int x, int y, int count) { int val = (int) elements[index]; |