Para um dado inteiro a, encontre todas as combinações únicas de números inteiros positivos que somam um

Não é uma pergunta de lição de casa. Eu estava passando as perguntasaqui e me deparei com essa pergunta. Alguém respondeu. Eu tentei muito entender a recursão usada, mas não sou capaz de obtê-la. Alguém poderia me explicar?

Escreva uma função, para um determinado número, imprima todas as maneiras diferentes de fazer esse número, usando adição e qualquer número igual ou menor que esse número e maior que zero.

Por exemplo, dadoa = 5, temos as sete maneiras a seguir para compor 5:

1, 1, 1, 1, 11, 41, 1, 1, 21, 1, 32, 31, 2, 25

A solução do site está em C ++:

void printSeq( int num , int a[] , int len , int s )
{
    if( num <= 0 )
    {
        for( int j = 0 ; j < len ; j++ )
            cout << a[ j ] << "," ;
        cout << endl;

        return;
    }

    for(int i = s ; i <= num ; i++)
    {
        a[ len ] = i;
        printSeq( num - i , a , len + 1 , i );
    }
}

int main()
{
    int a[5];
    printSeq(5,a,0,1);
    cin.get();
    return 0;
} 

questionAnswers(2)

yourAnswerToTheQuestion