一道遞歸的好題
題目描述:
設整型數組A中有n個元素,輸出從這n個數中取出的k個數的所有組合(k<=n)。例如:若A中存放的數是1,2,3,4,5,k為3,則輸出結果應為:123,124,125,134,135,145,234,235,245,345
題目分析:
從數組A中選出K(本題中k=3)個元素,為了避免重複和泄漏,可分別求出包括A[0]和不包括A[0]的所有組合。即包括A[0]時,求出A[1...n]中取出k-1個數的所有組合,不包括A[0]時,求出A[1...n]中取出k個元素的所有組合。將這兩種情況合到一起,就是最終的結果。
#include <stdio.h> int b[3]; int a[]={1,2,3,4,5}; void comb(int i,int j,int k) { if(k==0) { for(int m=0;m<3;m++) printf("%d",b[m]); printf("\n"); } else if(i+k-1<5) { b[j++]=a[i]; comb(i+1,j,k-1);//在裏麵了 comb(i+1,j-1,k);//不在裏麵了 } } int main() { comb(0,0,3); return 0; }
輸出結果:
---------------我是華麗的分割線-----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h> int b[3]; int a[]={1,2,3,4,5}; void comb(int i,int j,int k) { if(k==0) { for(int m=0;m<3;m++) printf("%d",b[m]); printf("\n"); } else if(i-k+1>=0) { b[j++]=a[i]; comb(i-1,j,k-1);//在裏麵了 comb(i-1,j-1,k);//不在裏麵了 } } int main() { comb(4,0,3); return 0; }
輸出結果:
最後更新:2017-04-03 21:30:16