Рекурсивная функция СИ, Расшифровка аббревиатур

Помогите пожалуйста с кодом. Надо написать программу на Си, что будет выводить варианты расшифровки аббревиатуры. Пользователь вводит сначала аббревиатуру, потом цифру, означающее максимальное количество букв аббревиатуры в одном слове и текст аббревиатуры.
input1: АГЗС
input2: 1 "автогазозаправочная станция"
Программа должны вывести вариации расшифровки аббревиатуры.
Output:
"АвтоГаЗозаправочная Станция"
"АвтоГазоЗаправочная Станция"

input1: FIT
input2: 2 Fackulty of Information Technology
Output:
"Faculty of InformaTion technology"
"Faculty of Information Technology"
"Faculty of informatIon Technology"
"faculty oF InformaTion technology"
"faculty oF Information Technology"
"faculty oF informatIon Technology"
"faculty of inFormatIon Technology"

input1: FIT
input2: 2 fit
output: 0

input1: FIT
input2: 3 fit
output: "FIT"

Чтоб сделать эту программу надо использовать рекурсивную функцию. Но я пока не придумала, как это реализовать. Благодаря помощи в ответах получилось, но не выводить строку, если количество заглавных букв в слове превышает количество заданное пользователем не вышло. Вот мой код ниже.

int coco(const char* word, const char* abbr, int Astr, int Babbr, int cnt, int N){
    for (int j = 0; j < Babbr; j++){
        for (int i = 0; i < Astr; i++){
            if (word[i] == abbr[j]) cnt++;
        }
    }
    if(cnt <= N) {
        return 0;
        //printf("%d\n", cnt);
    } else return 2;
}
int del_words(char* str, char* abbr, unsigned counter, unsigned N){
    char ** limb = (char**)malloc(strlen(str)*sizeof(char*));
    char * COPIE = (char *) (char **) malloc(strlen(str) * sizeof(char *));
    COPIE = strcpy(COPIE, str);
    int Astr, Babbr = strlen(abbr);
    char *delsim = strtok(COPIE, " ,.-;:'!?");
    while (delsim != NULL) {
        limb[counter] = delsim;
        counter++;
        delsim = strtok(NULL, " ,.-;:'!?");
    }
    for(int i = 0; i < counter; i++){
        //printf("%s", limb[i]);
        if(coco(limb[i],abbr,strlen(limb[i]),Babbr,0,N) == 2 ) return 1;
    }
    return 0;
}
void decoding(char* str, const char* a, int sp, int ap, unsigned N) {
    //если рабочий символ в аббревиатуре уже больше, чем длина аббревиатуры, то вывод
    if (ap >= strlen(a) && del_words(str, a, 0, N) == 0) {
        printf("\"%s\"\n", str);
        return;
    }
    // место в строке, где был найден символ из аббревиатуры; до конца строки; на следующйи символ
    for (char* f = strchr(str + sp, a[ap]); f; f = strchr(f + 1, a[ap])) {
        *f = toupper(*f);
        decoding(str, a, (int)(f - str), ap + 1, N);
        *f = tolower(*f);
    }
}

Ответы (1 шт):

Автор решения: Mikhailo

Как один из вариантов:

void get(char* s, const char* a, int sp, int ap) {
    if (ap >= strlen(a)) {
        printf("%s\n", s);
        return;
        }
    for (char* f = strchr(s + sp, a[ap]); f; f = strchr(f + 1, a[ap])) {
        *f = toupper(*f);
        get(s, a, (int)(f - s), ap + 1);
        *f = tolower(*f);
        }
    }

А это использование:

int main() {
    char in[]   = "Faculty of InformaTion technology";
    char abbr[] = "FIT";
    for (char* c = in; *c; ++c) *c = tolower(*c);
    for (char* c = abbr; *c; ++c) *c = tolower(*c);
    get(in, abbr, 0, 0);
    }
→ Ссылка