private static void Main(String[] args)
{
StringBuilder sb = new StringBuilder();
GetPartialNumbers(40, 9, 10, sb);
File.WriteAllText("numbers.txt", sb.ToString());
System.Console.ReadLine();
}
private static void GetPartialNumbers(Int32 numberToPart, Int32 maxNumberPerPart, Int32 maxParts, StringBuilder sb, params Int32[] partialNumbers)
{
Int32 sum = partialNumbers.Sum();
if (numberToPart - sum > 0)
{
if (partialNumbers.Count() < maxParts)
{
Int32 lastPartialNumber = (partialNumbers.Any() ? partialNumbers.Last() : 1);
for (Int32 i = lastPartialNumber; i <= Math.Min(numberToPart - sum, maxNumberPerPart); i++)
{
var newPartialNumbers = new List<Int32>(partialNumbers.ToList());
newPartialNumbers.Add(i);
GetPartialNumbers(numberToPart, maxNumberPerPart, Math.Min(maxParts, numberToPart), sb, newPartialNumbers.ToArray());
}
}
}
else
{
String line = String.Join(" ", partialNumbers);
System.Console.WriteLine(line);
sb.AppendLine(line);
}
}