Uma função é chamada de recursiva caso ela chame a si mesma.

Vamos pensar no seguinte problema: Dado um inteiro n, imprima todos os números de n até 1.

Para resolvermos ele de uma maneira intuitiva, basta rodar um loop de n até 1 e ir imprimindo inteiro por inteiro. Porém, além desta solução, chamada de iterativa, existe uma solução recursiva, que é a que iremos abordar para resolvê-lo.

Vamos utilizar uma função do tipo void chamada solve() que contém um único parâmetro chamado número. Inicialmente, chamaremos solve(n). Dentro da função, a primeira coisa que faremos será imprimir número. Caso número = 1 sabemos que não precisaremos imprimir mais nenhum inteiro, então apenas utilizamos a função return; para encerrarmos a recursão. Caso contrário, significa que número é maior ou igual 1, então chamaremos solve(número-1). 

Código de exemplo:

#include <bits/stdc++.h>
using namespace std;
void solve(int numero){ // Modo Recursivo
cout << numero << "\n";
if(numero==1)return; // Chamado de caso base, interrompe a recursão de se chamar infinitamente, causando "Tempo Limite Excedido"
solve(numero-1); // Função chamando a si mesma, gerando uma recursão.
}
int main(){
int n;
cin >> n;
solve(n);
for(int i=n; i>=1; i--){ // Modo Iterativo
cout << i << "\n";
}
}

Tente resolver todos os problemas abaixo, pois para se aprender função recursiva é necessário praticar bastante!

Problemas para praticar: