Aqui esta mi solucion.
Hay soluciones para hartarse...
void combinaciones(int lista[],int numElementosLista,int numElementosCombinacion,int paso)
{
int i;
static int *listaCombinacion=NULL;
if(numElementosLista < numElementosCombinacion)
return;
if(!listaCombinacion) /* si la lista esta sin inicializar -> reservar memoria */
listaCombinacion
= (int*) malloc(numElementosCombinacion
* sizeof(int));
if(numElementosCombinacion == 0) /* si ya se ha llegado al numero de elementos deseado */
{
/* imprimir resultado */
for(i=0 ; i < paso ; i++)
printf("%d ",listaCombinacion
[i
]);
return;
}
for(i=0 ; i <= numElementosLista - numElementosCombinacion ; i++)
{
listaCombinacion[paso] = lista[i]; /* poner el valor que corresponde en la combinacion */
combinaciones(lista + i + 1,numElementosLista - 1 - i,numElementosCombinacion - 1,paso+1);
}
if(paso == 0) /* si se ha teminado con la primera llamada */
{
listaCombinacion=NULL; /* poner a NULL para sucesivas llamas a la funcion*/
}
return;
}