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: