Остановка рекурсивной функции

Пишу в Code::Blocks, на C. Перебираю все возможные варианты строк для произвольной заданной длины и сравниваю результат с образцовой строкой. Решил пойти через рекурсию, но столкнулся с проблемой. Даже когда моя функция уже подобрала нужную строку, ещё какое-то время выполняются оставшиеся вызовы этой функции, что занимает достаточно много времени. При этом мне необходим продолжить выполнение программы. Сначала реализовывал проверку с помощью глобальной переменной, но это очень плохая идея. Хотел бы узнать, есть ли способ лучше и проще.

char* constructor(char* p_p, char* t_p, short unsigned int lvl, char* symbols, short unsigned int border){
    if(lvl > strlen(t_p)){
        return p_p;
    }
    else{
        p_p[lvl-1] = ' ';
        p_p[lvl+1] = '\0';
        for(short unsigned int i =0; i<border; i++){
            p_p[lvl-1] = symbols[i];
            p_p = constructor(p_p, t_p, lvl+1, symbols, border);
            if(!strcmp(p_p, t_p)){
                printf_s("Password: %s\n", p_p);
            }
        }
        p_p[lvl - 1] = '\0';
        return p_p;
    }
};

Поясню про переменные: p_p - указатель на строку, с её помощью и перебираем все варианты; t_p - образцовая строка, с которой сравниваем; lvl - "уровень погружения", обозначает символ, который мы перебираем в данный момент; symbols - указатель на строку со всеми допустимыми символами; border - "граница" допустимых символов


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

Автор решения: Эникейщик

Просто сразу возвращать найденное значение

if(!strcmp(p_p, t_p))
    { printf_s("Password: %s\n", p_p);
      return p_p;
    }
→ Ссылка