Recursão de for's

Eu tentei descobrir como fazer isso por um bom tempo e não está funcionando como planejado; Estou escrevendo um código onde há 1 a k números, preciso encontrar todas as combinações possíveis sem repetições. por exemplo. para 3: 1, 2, 3, 12, 13.

Exemplo para contar números de 4 dígitos com 1, 2, 3, 4, 5.

int k = 5;
for (int p = 0; p < k; p++)
{
    for (int i = p+1; i < k; i++)
    {
        for (int j = i + 1; j < k; j++)
        {
            for (int h = j + 1; h < k; h++)
            {
                cout << p + 1 << i + 1 << j + 1 << h + 1 << endl;
            }
        }
    }
}

E há um exemplo para o número de 3 dígitos com 1, 2, 3.

int k = 4
for (int p = 0; p < k; p++)
{
    for (int i = p+1; i < k; i++)
    {
        for (int j = i + 1; j < k; j++)
        {
            cout << p + 1 << i + 1 << j + 1 << endl;
        }
    }
}

Penso que, para contar a posição possível de n dígitos, sem repetir, preciso de n para. E eu não sei como fazê-lo sem recursão, que não funciona quando eu faço. Meu objetivo é obter uma recursão que conte e imprima possíveis posições para n dígitos.

questionAnswers(4)

yourAnswerToTheQuestion