#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int n=6;
int k=4;
void podzbiory(int K[], int k)
{
    int g,b;
    for(int z=1;;z++)
    {
        for(int i=0;i<=k-1;i++)
        {
            int a=0;
            for(int j=0;j<=k-1;j++)
            {
                if((K[i]+1)!=K[j]) a++;
            }
            if(a==k)
            {
                b=i;
                break;
            }
        }
        if(K[b]==n) break;
        K[b]=K[b]+1;
        for(g=0;g<=b-1;g++)
        {
            if(K[g]<K[b]) K[g]=g+1;
        }
        printf("{");
        for(g=0;g<=k-1;g++)
        {
            printf("%d", K[g]);
            if(g==(k-1)) break;
            printf(",");
        }
        printf("}\n");
    }
}
int main()
{
    int K[k];
    printf("{");
    for(int a=0;a<k;a++)
    {
        K[a]=a+1;
        printf("%d", K[a]);
        if(a+1==k) break;
        printf(",");
    }
    printf("}\n");
    podzbiory(K, k);
}

Jest to program wypisujący wszystkie k-elementowe podzbiory zbioru od 1 do n. Da się to jakoś łatwo przekształcić na rekurencję? Nie cierpie tych rekurencji dlatego zrobiłem to w taki sposób, rekurencją pewnie dałoby się 100 razy prościej.