http://www.cnblogs.com/JeffreyZhao/archive/2009/06/21/1507847.html#
给出sum、min、max和n四个正整数,请输出所有将sum拆分为n个正整数之和,其中每个正整数k都满足:min <= k <= max。这n个正整数之间可以重复,不过由于加法交换率的作用,1 + 2和2 + 1便算是重复的拆分了
private static void DoBest(int[] array, int sum, int n, int minInclusive, int maxInclusive) { int index = array.Length - n; if (n == 1) { array[index] = sum; PrintResult(array); return; } int itemMinInclusive = Math.Max(sum - maxInclusive * (n - 1), minInclusive); int itemMaxInclusive = sum / n; for (int i = itemMinInclusive; i <= itemMaxInclusive; i++) { array[index] = i; DoBest(array, sum - i, n - 1, i, maxInclusive); } }