O Que É Recursividade?
Quer entender O Que É Recursividade? Clique aqui!
Tá, já entendeu O Que É Recursividade? Então, continue a leitura 😋
Segue um lindo diagrama para ilustrar este conceito sensacional:
flowchart TD
A[Tabnews] --> B(O Que É Recursividade?)
B --> C{Quer entender O Que É Recursividade? Clique aqui!}
C -->|Sim| B[O Que É Recursividade?]
C -->|Não| D[Então, continue a leitura!]
Analogia do Espelho
Um outro bom exemplo de recursividade é um espelho na frente de outro espelho:
Conceito
Recursividade na programação vem de uma função que pode chamar a si mesma.
Para criar uma função recursiva é necessário 2 critérios:
- Condição de parada
- Avanço recursivo
Na condição de parada é necessário uma forma de parar nossa recursividade quando atingirmos nossos objetivos, ou seja, quando nosso problema for resolvido com sucesso.
No avanço recursivo é necessário uma forma de trazer a sensação de avanço na recursividade, ou melhor dizendo, uma forma da recursividade está chegando cada vez mais próximo da solução do problema.
Mas quando a recursividade é útil de fato?
- A recursividade é útil quando temos um problema que pode ser dividido em partes menores e cada parte pode ser resolvida usando a mesma função.
- É como se estivéssemos resolvendo um quebra-cabeça, onde cada peça é parecida com o quebra-cabeça completo.
- Lembre-se: Sempre existirá uma versão iterativa de um código recursivo e uma versão recursiva de um código iterativo.
- Mas não é porque existe 2 tipos de versões de códigos que devem ser utilizadas em todos os momentos, existem cenários que um ou outro brilhará mais!
- Logo, recursividade não é bala de prata e você precisará saber lidar quando usar uma ou outra abordagem.
O Conhecido Fatorial
Quando desejamos obter o resultado de um número fatorial, simplesmente multiplicamos os seus números anteriores até o 1.
Por exemplo, ao obter o fatorial de 5, ou 5!:
5 x 4 x 3 x 2 x 1 = 120
Mas e como resolver isso na programação? É possível fazer isso de forma iterativa! Por exemplo em código python:
def fatorial(n):
resultado = 1
for i in range(1, n + 1):
resultado = resultado * i
return resultado
print("O fatorial de 5 é", fatorial(5))
Mas também é possível realizar essa mesma tarefa de forma recursiva que torna o código até um pouco mais claro (e performático em alguns casos).
Segue um exemplo em código python sobre o Fatorial:
def fatorial(n):
if n == 0:
return 1
else:
return n * fatorial(n - 1)
print("O fatorial de 5 é", fatorial(5))
Códigos Famosos Recursivos e Elegantes
-
Torre de Hanói
- A solução mais eficiente e elegante para esse problema é implementada recursivamente.
-
Busca em profundidade (Depth-First Search)
- A implementação recursiva é comumente usada nesse algoritmo, pois é baseada em explorar profundamente um ramo antes de voltar e explorar outros ramos.
-
Quicksort
- O Quicksort é um algoritmo de ordenação eficiente que usa a estratégia "dividir para conquistar" e a implementação recursiva é mais intuitiva e concisa para o Quicksort.
-
Árvores binárias
- A inserção, a remoção e a busca em árvores binárias podem ser implementadas de maneira mais clara e elegante usando a recursão, devido à natureza recursiva da própria estrutura.
Conclusão
Volte ao início deste artigo e leia novamente até você entender o conceito de recursividade. Se tão somente entender o conceito recursividade, você estará livre deste loop.