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

Posted Roam-G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个递归算法,找出从自然数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);

 

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

以上是关于编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。的主要内容,如果未能解决你的问题,请参考以下文章

编写一个递归算法,输出自然数1,2,…,n这n个元素的全排列

6.数的计算(递归算法)

丑数 二 ---- 设计一个算法,找出只含素因子`2`,`3`,`5` 的第 n 小的数

丑数 二 ---- 设计一个算法,找出只含素因子`2`,`3`,`5` 的第 n 小的数

每天算法一丁点--递归算法应用:半数集

2_3 递归与分治策略(二分搜索技术)