C++ 递推
把正整数N分解成M个正整数的和,即使M个数相同但顺序不同也认为是不同的方案,要求总方案数。如3=1+2跟3=2+1是两个不同的方案。
c++ --------------------编程问答--------------------
using System;--------------------编程问答-------------------- http://bbs.csdn.net/topics/390360329
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var result = OutPut(16, new int[] { 1, 2, 4 }, new List<int>());
foreach (var item in result)
Console.WriteLine(string.Join(",", item.Select(x => x.ToString())));
}
/// <summary>
/// 求一个数 有些数的之和组成的排列
/// </summary>
/// <param name="sum">和数</param>
/// <param name="array">构成的数字</param>
/// <returns>返回能够组成的一个集合</returns>
public static IEnumerable<List<int>> OutPut(int sum, int[] array, IEnumerable<int> seed)
{
if (seed.Sum() == sum)
yield return seed.ToList();
else
foreach (var item in array.Select(x => seed.Concat(new int[] { x })).Where(x => x.Sum() <= sum).SelectMany(x => OutPut(sum, array, x)))
yield return item;
}
}
}
和这个类似
考虑顺序就去掉
.Where(x => x >= seed.LastOrDefault()) --------------------编程问答-------------------- 在递归是一个办法母函数是一个办法 ,母函数比递归 高太多. --------------------编程问答-------------------- 必须赞一下。
补充:.NET技术 , C#