一段用来求组合数的递归代码

本文介绍了一种使用C#语言实现的枚举算法,该算法能够枚举从11个不同元素中选取4个元素的所有可能组合,并通过递归函数进行实现。文中提供了一个具体的示例,即计算C(4,11),展示了如何通过递归调用和条件判断来生成所有可能的组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久以前用来枚举组合数的,当时应该是C(4,11)。

class Program
{
static void Main(string[] args)
{
int sum = 0;
int[] vs = new int[4];
int[] vars = new int[11]{1,2,3,4,5,6,7,8,9,10,11};
G(0, 0, 4, ref vars, ref vs, ref sum);
Console.WriteLine(sum);
}
static void G(int startIndex, int count, int n, ref int[] vars, ref int[] vs, ref int sum)
{
if (count == n)
{
sum++;
Console.WriteLine("{0}-{1}-{2}-{3}", vs[0], vs[1], vs[2], vs[3]);
}
else
{
if ((startIndex < vars.Length) && ((vars.Length - startIndex) >= (n - count)))
{
vs[count] = vars[startIndex];
count++;
G(startIndex + 1, count, n, ref vars, ref vs, ref sum);
count--;
G(startIndex + 1, count, n, ref vars, ref vs, ref sum);
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值