Introdução à Recursão
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 45 de 56.
A recursão é uma técnica de programação onde uma função chama a si mesma para resolver um problema. Em vez de usar loops, as funções recursivas decompõem problemas complexos em subproblemas menores e semelhantes até que alcancem um caso simples que pode ser resolvido diretamente.
Toda função recursiva deve ter dois componentes essenciais. O caso base é uma condição que interrompe a recursão - sem ele, a função chamaria a si mesma para sempre. O passo recursivo é onde a função chama a si mesma com parâmetros modificados, aproximando-se do caso base a cada chamada.
Aqui está um exemplo simples de contagem regressiva que demonstra recursão:
void countdown(int n) {
if (n <= 0) { // Caso base: para quando n chega a 0
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Passo recursivo: chama com n-1
}Quando você chama countdown(3), ele imprime 3, depois chama countdown(2), que imprime 2, depois chama countdown(1), e assim por diante até atingir o caso base. Cada chamada de função espera que a próxima seja concluída antes de terminar, criando uma cadeia de chamadas que eventualmente retorna ao chamador original.
Folha de consulta
Recursão é quando uma função chama a si mesma para resolver um problema, dividindo-o em subproblemas menores.
Toda função recursiva precisa de:
- Caso base: condição que interrompe a recursão
- Passo recursivo: a função chama a si mesma com parâmetros modificados
Exemplo de função de contagem regressiva:
void countdown(int n) {
if (n <= 0) { // Caso base
std::cout << "Done!" << std::endl;
return;
}
std::cout << n << std::endl;
countdown(n - 1); // Passo recursivo
}Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros4Mapas (Pares Chave-Valor)
Introdução ao std::mapCriando um MapaAcessando e Modificando ValoresVerificando ChavesRemovendo ParesIterando sobre um MapaRecapitulação - Frequência de Palavras7Funções Avançadas
Passagem por ReferênciaIntrodução a Expressões LambdaLambdas com ParâmetrosLambdas com Valores de RetornoIntrodução à RecursãoFatorial RecursivoOrdenação com Lambda2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa