编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。

编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。

若设这n个自然数存放在整数数组A[n]中,A[i]中存放整数i+1(0≤i≤n-1)。

为求从这n个自然数中任取r个数的组合,可采用递归方法 comb(A,n,r)。

例如当n=5,r=3时,首先确定第一个数,如5,再从比它小的剩余的n一1个数中取r一1个数的组合comb(A,n—1,r一1),

即可得到以5开始的全部所要求的组合;

然后再轮流以4,3开始,依此办理,就可得到全部所要求的组合。

递归算法的描述如下。
 

#include<iostream>
using namespace std;

void comb(int A[], int m, int n, int r) {
	//从A[]中的前m个整数中任取n个整数的所有组合,
	//r在最初调用时 =n,是为了控制输出使用的。
	int i, j;
	for (i = m;i >= n;i--) {
		A[n - 1] = i;
		if (n > 1) {
			comb(A, i - 1, n - 1, r);
		}
		else {
			for (j = r - 1;j >= 0;j--) {
				cout << A[j];
			}
			cout << endl;
		}
	}
}

int main() {
	int A[5];
	for (int k = 0;k < 5;k++) {
		A[k] = k + 1;
	}
	comb(A, 5, 3, 3);
}

 

 让学习多一点欢乐 --景甜

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roam-G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值