void getn(int a[], int b[] , int m, int n, int index,int lastindex) { int i = lastindex +1; if(index == n ) { int x; for(x =0 ; x < n ;x ++) { printf(" %d ",a[b[x]]); } printf(""); return ; } while( i < m) { b[index] = i; getn(a,b,m,n,index +1,i); i ++ ; }
}
非递归的解法:
void agen(int a[],int m, int n) /* from m get n */ { int i ,j ; int b[100] = {0}; /* big then n */ i = j =0; while(b[0] < m ) { while( i < m) { if(j == n -1 ) { int x ; for( x =0 ; x < n ; x ++) { printf(" %d ",a[b[x]]); } printf(""); } else { j ++; } i ++; b[j] = i;
} do { j --; b[j] ++ ; } while(b[j] >= m ); i = b[j] ; } }
测试的主程序:
int main()
{
int a[10] = {0, 1,2,3,4,5,6,7,8,9};
int b[20] ={0};
getn(a,b,10,5,0,-1);
agen(a,10,5);
return 0;
}