递归实现排列组合问题

博主在准备ACM大赛,深入探讨使用递归算法解决排列组合问题。代码示例展示了如何用C++递归地输出从m中取n个数的所有组合。递归函数`f(int i)`逐步填充数组`sz[]`并调用自身以生成所有可能的排列,最后通过`print()`函数输出结果。

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

临近ACM大赛了,博主正在复习递归,毕竟博主是一个菜鸟,对递归总是有太多的疑问,所以搜罗了一些资料集中细谈一下用递归处理的排列组合问题

题目:用递归算法输出Cn m(从m中取n个数)的每一次的值;

代码如下:

#include <iostream>

using namespace std;

int N,M,n;//N,M为题中的N,M;n为控制第一个位置的数

int sz[100];//用来存储排列出的数值

void print()//输出个数

{

for(int i=1;i<=n;i++)

cout<<sz[i]<<" ";

cout<<endl;

}

void f(int i)//递归函数

{

n++;//第一位的值

for(;i<=M&&n<=N;i++)

{

sz[n]=i;

if(n==N)

print();

f(i+1);

}

n--;

}

int main()

{

cin>>N>>M;

n=0;

f(1);

return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值