/// <summary> /// /// </summary> /// <param name="number">待分解的数</param> /// <param name="times">分解成几个数字</param> public static List <List <int> > Resolve(int number, int times) { var baseNumber = number; var maxValue = number + 1 - times; var container = new AdditionItemContainer(); for (var i = 1; i <= maxValue; i++) { var addends = new List <int> { i }; ResolveCore(container, addends, baseNumber, number - i, times); } return(container.Items); }
/// <summary> /// /// </summary> /// <param name="container"></param> /// <param name="addends"></param> /// <param name="baseNumber"></param> /// <param name="number"></param> /// <param name="times"></param> private static void ResolveCore(AdditionItemContainer container, List <int> addends, int baseNumber, int number, int times) { if (addends.Count == times - 1) { if (addends.Sum() < baseNumber) { addends.Add(baseNumber - addends.Sum()); container.Add(addends); } return; } for (var i = 1; i < number; i++) { var dd = new List <int>(addends) { i }; ResolveCore(container, dd, baseNumber, number - 1, times); } }