#include #include int *Init (int k); void Foo (int *nums1, int *nums2, int max, int k1, int k2); int main (int argc, char *argv[]) { int *nums, *nums2; int k; if ( argc != 2 ) { fprintf (stderr, "Usage: a.out \n"); exit (-1); } k = atoi (argv[1]); nums = Init (k); nums2 = (int *) malloc (k * sizeof(int)); Foo (nums, nums2, k, 0, 0); return (0); } int *Init (int k) { int i; int *nums; nums = (int *) malloc (k * sizeof(int)); for ( i=0 ; i < k ; i++ ) { nums[i] = i+1; } return (nums); } void Foo (int *nums1, int *nums2, int max, int k1, int k2) { int i; /* base case */ if ( k1 == max ) { if ( k2 ) { for ( i=0 ; i < k2 ; i++ ) { printf ("%d ", nums2[i]); } printf ("\n"); } } else { /* general rule */ Foo (nums1, nums2, max, k1+1, k2); nums2[k2] = nums1[k1]; Foo (nums1, nums2, max, k1+1, k2 + 1); } }