Article image
Henrique Coutinho
Henrique Coutinho01/12/2022 11:12
Compartilhe

Você precisa saber como usar a Recursividade - Orange Tech + (Parte 1/2)

    Bom dia, pessoal!! Como estão?

    Esse é meu primeiro artigo aqui na DIO e resolvi falar de algo que acho simplesmente genial. A Recursividade!

    O conteúdo do artigo será introdutório e bem simplificado para o entendimento!

    Mas o que é Recursividade?

    De forma bem resumida, é o fato de chamarmos uma função dentro da própria função ou um objeto dentro do próprio objeto.

    A recursividade nos permite abstruir comportamentos repetitivos ou que podem ser quebrados em uma única função e deixar o código mais limpo e simples. Desta forma, uma função que possui várias linhas dentro de um laço "for", pode ser resumida em um método que chama a si mesmo e até retornar um valor final.

    Exemplos:

    Como exemplos utilizaremos dois desafios de código do Bootcamp Orange Tech +, implementados em JavaScript:

    Desafio: Uma Chamada Recursiva

    Descrição

    Neste desafio, receba um número inteiro N, calcule e imprima o somatório de todos os números de N até 0.   

    Entrada

    A Entrada será composta por um número inteiro, N

    Saída

    Será impresso o somatório de N até 0, como no exemplo a baixo: 

    Entrada | Saída

    10 55

    4 10

    15 15

    Quando olhamos esse tipo de problema, tendemos a pensar da seguinte forma:

    1. Preciso fazer uma soma com todos os números menores que n;
    2. Se eu começar no 10, posso somar 10 + 9 + 8 + 7 + 6 + 5 +4 + 3 + 2 + 1;
    3. Basta eu usar o um laço de repetição que começa com n e soma o valor atual até chegar no 0;

    Desta abstração chegamos ao seguinte código:

    let soma = 0;
    for(let i = 0; i <= n; i++){
     soma += i;
    }
    

    Para problemas simples, essa é uma forma muito viável de resolver a questão, mas para desafios complexos, a utilização de laços de repetição pode ficar cada vez mais custosa, ainda mais quando não sabemos quantas vezes serão necessárias a repetição das linhas de código.

    O exemplo acima é ótimo para começarmos a utilizar a recursividade. Repare que o comportamento da repetição obedece um padrão: Sempre soma o número atual à uma variável que representa o total da soma.

    Para o uso da Recursividade, podemos começar pensando nos tipos de problemas que ela pode resolver. Dois tipos básico que eu uso a Recursividade são:

    1. Problemas repetitivos, onde há sempre um padrão, seja ele simples ou complexo. Como o desafio acima.
    2. Problemas que podem ser quebrado em problemas menores, que podem ser quebrados em problemas menores, que podem ser quebrados... Como veremos no desafio 2.

    No âmbito profissional, temos diversos usos para a recursão:

    • Buscar todos colaboradores subordinados a certo gerente. Repare que precisamos pegar os subordinados do gerente, os subordinados dos subordinados, e, assim, até o último colaborador. Nesse caso, não sabemos nem o número de repetições necessárias, mas podemos fazer uma função que pega os subordinados do colaborador atual e, nela mesma, chamamos ela novamente pedindo os subordinados dos subordinados, até que os colaboradores enviados como parâmetro não possuam mais subordinados.
    • Da mesma maneira podemos pegar superiores, cargos, hierarquias, empresas, e diversas outras informações que conversam entre sim;

    Vamos agora transformar o desafio 1 para utilizar a Recursão!

    Primeiramente precisamos entender qual o padrão que vamos utilizar:

    • Pegamos o caso onde n = 3, isto é, somatório 3 = 3 + 2 + 1;
    • Repare que para n = 2: somatório 2 = 2 + 1;
    • Ou seja, somatório 3 = 3 + somatório 2;
    • Da mesma forma, para n = 4: Somatório de 4 = 4 + 3 + 2 + 1 = 4 + somatório de 3;
    • Assim quando a gente pega um numero grande, exemplo n = 100, não precisamos fazer 100 + 99 + 98...;
    • Podemos fazer 100 + somatório de 99!

    Basicamente é isso que iremos fazer, pegar a função e chamar ela mesma para n-1, até que chegue a 0. Assim nossa função recursiva fica:

    function somatorio(n){
     return n + (n !== 0 ? somatorio(n-1) : 0);
    }
    

    A função sempre retornará o valor de n + somatório(n-1) até que chegue em 0, onde a função retornará 0;

    Assim, para o caso n = 4:

    1. Somatório de 0 => retorna 0
    2. Somatório de 1 => retorna (1 + somatório de 0) = retorna 1
    3. Somatório de 2 => retorna (2 + somatório de 1) => Como somatório de 1 já retornou 1 => retorna 2 + 1 = retorna 3;
    4. somatório de 3 => retorna (3 + somatório de 2) => retorna 6;
    5. Somatório de 4 => retorna 4 + somatório de 3 = 10.

    Agora faremos o segundo desafio:

    Desafio: Quadrados Perfeitos!

    Mas deixaremos esse desafio para a parte 2 para o texto não ficar gigantesco!

    Muito obrigado pela leitura até aqui!! Conto com você na parte 2 desse artigo!

    Vamos se seguir no Linkedin? www.linkedin.com/in/henrique-scoutinho

    Compartilhe
    Comentários (3)
    Rafael Cruz
    Rafael Cruz - 01/12/2022 12:06

    Cara legal,


    Muito boa explicação! Obrigado


    Estava procurando na internet sobre esse assunto, e eu consegui entender com sua explicação!

    Ironio Costa
    Ironio Costa - 01/12/2022 11:57

    Olá, Henrique,Bem interessante o artigo: isso air.

    Michel Silva
    Michel Silva - 01/12/2022 11:28

    Muito boa explicação! Valeu!