假設這樣一個數組:
1 2 3 4 5
n=5
若 m=3 也就是要求C(3,5)
首先先選第一個數 1
那么剩下的工作就是在2-5之間選擇2個數
如果我們沒有選擇第一個數 選第二個數2
那么剩下的工作就是在3-5之間選擇2個數
這樣就很好遞歸了 只需要記錄下當前已經選了幾個數 當前選的最后一個數是什么 遞歸即可
#include<bits/stdc++.h> using namespace std; int sum=0; //記錄總數 void digui(int *a,int *b,int t,int now,int n,int m) { int i; if(t==m) //t記錄已經選擇了幾個數 若=m,輸出結果 { for(i=0;i<m;i++) cout<<b[i]<<" "; cout<<endl; sum++; return; } else { for(i=now;i<=n-(m-t);i++) //now代表現在可以從哪個數選起 { b[t]=a[i]; digui(a,b,t+1,i+1,n,m); } } } int main() { int a[10],b[10],i,n,m; //a為原數組 b存儲結果 cin>>n>>m; for(i=0;i<n;i++) cin>>a[i]; digui(a,b,0,0,n,m); cout<<sum<<endl; }