编写一个递归算法,找出从自然数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个元素的全排列
丑数 二 ---- 设计一个算法,找出只含素因子`2`,`3`,`5` 的第 n 小的数