递归算法:找出n个自然数取r个数的组合,求解释,详细点
当n=5 r=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
程序代码:
//这个是一般的方法 #include <iostream> using namespace std; int main() { int n=5,i,j,k,t; t=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) for(k=1'k<=n;k++) if(i<j && j<k) { t++; cout<<i<<" "<<j<<" "<<k<<endl; } cout<<t<<endl; return 0; } 另一种方法: //递归 comb(int m,int k) { int i,j; for(i=m;i>=k;i--) { a[k]=i; if(k>1) comb(i-1,k-1); else { for(j=a[0];j>0;j--) cout<<a[j]<<" "; cout<<endl; } } } int main() { int n,r; cin>>n>>r; if(r>n) cout<<"error"<<endl; else { a[0]=r; comb(n,r); } }
[ 本帖最后由 风雨123 于 2013-8-4 17:08 编辑 ]