求教一个递归法!
求助!用递归法做下列一道习题!找n个数的中r个数的组合。要求:
输入:n,r=5 3
输出:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
、、、、、、、等
[此贴子已经被作者于2006-8-27 20:30:32编辑过]
程序是正确的,因为楼主要求的程序是求组合数,如果求排列数的话才应该是60
我写了一个求排列数的程序,大家可以看一下
[CODE]
#include <iostream>
using namespace std;
const int maxn=500;
bool used[maxn]={false};
int strd[maxn];
int n, r;
void make(int k)
{
if(k==r)
for(int i=n-1; i>=0; i--)
{
if(!used[i])
{
for(int j=0; j<r-1; j++)
cout<<strd[j]<<' ';
cout<<i+1<<endl;
}
}
else
for(int i=n-1; i>=0; i--)
{
if(used[i])continue;
strd[k-1]=i+1;
used[i]=true;
make(k+1);
used[i]=false;
}
}
int main()
{
cin>>n>>r;
make(1);
system("PAUSE");
return EXIT_SUCCESS;
}