O que é recursão e como usá-la?

O que é recursão e como usá-la?

A recursão é um conceito de programação divertido, mas pode ser um pouco complicado de aprender. Recursão significa simplesmente algo que se repete. Se você quiser ver um exemplo atrevido de recursão, tente pesquisar por recursão no Google. Você encontrará um ovo de Páscoa em que as sugestões de resultados da pesquisa são recursivas. Se, por outro lado, você gostaria de aprender como codificar uma função recursiva, continue lendo!

O que é uma função recursiva?

Uma função recursiva é uma função que chama a si mesma. Você essencialmente cria um loop com uma função. Como você pode imaginar, essas funções podem ser complicadas de escrever. Você não quer que seu código seja executado para sempre.

Semelhante a um loop, uma função recursiva será controlada por uma condição. Assim que a condição for atendida, a função para de chamar a si mesma, o que interrompe o loop. É assim que você pode criar uma função que chama a si mesma sem funcionar para sempre.

Embora uma função recursiva atue como um loop, ela é executada pelo computador de forma diferente. Portanto, alguns algoritmos são mais eficientes em um loop e outros se beneficiam de uma função recursiva. Mas antes de olharmos como usar uma função recursiva, você precisa saber como escrever uma.

Como escrever uma função recursiva

Todas as funções recursivas têm a mesma estrutura básica:

FUNCTION name IF condition THEN RETURN result ELSE CALL FUNCTION name END FUNCTION

O exemplo acima foi escrito em pseudo-código. Ele descreve a estrutura da função, que pode ser aplicada a qualquer idioma. Para simplificar, neste artigo, vamos nos concentrar em Python.

A primeira coisa a observar sobre uma função recursiva é que quando a condição é atendida, a função sai da recursão. Isso significa que, ao escrever uma função recursiva, a primeira coisa que você desejará determinar é quando interromper a recursão.

Se a condição não for atendida, a função chamará a si mesma. Portanto, se você quiser enviar informações para o próximo loop, terá que enviá-las como um argumento em sua função. Isso pode dar às funções recursivas muito mais poder.

Relacionado: O que é uma função na programação?

Exemplo de função recursiva em Python

Será muito mais fácil entender como funciona a recursão quando você a vir em ação. Para demonstrar isso, vamos escrever uma função recursiva que retorna o fatorial de um número.

Os fatoriais retornam o produto de um número e de todos os inteiros anteriores a ele. Por exemplo, o fatorial de 5 é 5 x 4 x 3 x 2 x 1 ou 120.

def factorialFunction(numberToMultiply): if numberToMultiply == 1 : return 1 else : return numberToMultiply * factorialFunction(numberToMultiply - 1) result = factorialFunction(3) print(result) //Outputs: 6

O programa acima fornecerá o resultado 6, que é o fatorial do número 3. Isso pode ser um pouco confuso no início. Ajudará se executarmos o programa passo a passo.

  1. Quando a função é chamada, numberToMultiply é igual a 3.
  2. A condição não é atendida, então vamos para a condição else .
  3.  Nossa função retorna 3 *, mas é então pausada. Ele deve chamar a si mesmo para determinar o restante do valor que está retornando.
  4. Quando a função é chamada desta vez, o valor de numberToMultiply é igual a 2.
  5. A condição não é atendida, então vamos para a condição else.
  6. Nossa função retorna 2 *, mas é então pausada. Ele deve chamar a si mesmo para determinar o restante do valor que está retornando.
  7. A função é chamada novamente. Desta vez, o valor de numberToMultiply é igual a 1.
  8. Nossa condição if for atendida. A função retorna 1.
  9. A função da etapa 6 agora pode retornar 2 * 1 para a função da etapa 3.
  10. A função na etapa três agora pode retornar 3 * 2 * 1, que é 6.

O que é recursão e como usá-la?

A recursão é um conceito complicado. Pode ser útil pensar nisso como o empilhamento de uma função em cima de outra. Quando uma função é finalmente resolvida, ela pode enviar as informações de volta para a pilha, até que todas as funções tenham sua resposta.

Isso é basicamente o que o seu computador faz. Quando você chama a função, ela é mantida na memória até que seja retornada. Isso significa que as funções recursivas podem usar muito mais memória do que um loop.

Portanto, pode não ser eficiente escrever loops como funções recursivas, mas é uma ótima maneira de praticar sua construção. Você deve ser capaz de codificar loops como funções recursivas com resultados semelhantes.

Um exemplo de como converter um loop em uma função recursiva

print("Enter an even number:") i = int(input()) while (i % 2) != 0 : print("That number is not even. Please enter a new number:") i = int(input())

Este loop também pode ser escrito recursivamente como:

def recursiveFunction(number) : if (number % 2) == 0 : return number else: print("That number is not even. Please enter a new number:") recursiveFunction(int(input())) print("Enter and even number:") i = recursiveFunction(int(input()))

A primeira etapa é determinar quando você deseja que a função pare. Nesse caso, queremos que ele pare assim que um número par for inserido. Em nosso exemplo, number rastreia a entrada do usuário. Se eles inserirem um número par, retornamos o número. Caso contrário, continuaremos a pedir um novo número.

Para configurar o loop, chamamos nossa função novamente. Mas, desta vez, o número que passamos para a próxima função é o novo número inserido pelo usuário. A próxima chamada de função verificará o número.

Esta é uma função muito ruim! Sim, está verificando se o número é par, como nosso loop, mas não é eficiente. Cada vez que o usuário insere um número ímpar, a função é mantida na memória e uma nova função é chamada. Se você fizer isso várias vezes, ficará sem memória!

Relacionado: Exemplos básicos de Python que o ajudarão a aprender rápido

Um exemplo do mundo real de uma função recursiva

Os exemplos acima são bons exemplos de quando não usar recursão. Então, onde a recursão é usada? Um bom exemplo de quando você deseja usar a recursão é pesquisar uma árvore binária.

O que é recursão e como usá-la?

Quando os dados são estruturados em uma árvore binária, você precisa percorrer vários caminhos para pesquisar os dados. Em cada ponto da árvore, você deve decidir se deseja continuar a pesquisar à direita ou à esquerda. Você poderia salvar qual parte da árvore visitou em uma variável, mas uma função recursiva pode rastrear naturalmente essa informação.

Imagine que estamos procurando o número seis na árvore acima. Poderíamos fazer uma função recursiva que pesquisa a árvore da esquerda para a direita. O algoritmo seria mais ou menos assim:

FUNCTION searchTree(branchToSearch) IF find 6 OR end of tree THEN RETURN result ELSE PROCESS branch CALL FUNCTION searchTree(left) CALL FUNCTION searchTree(right) END FUNCTION

Neste exemplo de pseudocódigo, o algoritmo pesquisaria primeiro o lado esquerdo da árvore. Cada vez que ele visita um novo número, a função é pausada e mantida na memória. Isso nos permite rastrear onde estivemos.

O algoritmo sempre pesquisará o lado esquerdo o mais longe que puder primeiro. assim que chegar ao final da árvore, o searchTree (à esquerda) será concluído e verificará o lado direito. Uma vez que ambos os lados são verificados, a busca retorna um galho e continua verificando o lado direito.

Se os algoritmos pesquisassem toda a árvore, eles o fariam na ordem:

2, 7, 2, 6, 5, 11, 5, 9 e 4

Veja se você pode acompanhar usando o pseudocódigo acima.

Revisão de recursão

A recursão é um tópico avançado. Levará algum tempo para entender e ainda mais para ficar bom em codificá-lo. Será útil se você percorrer as funções recursivas passo a passo. Pode até ajudar empilhar cartões de índice ou post-its à medida que você executa uma função ao aprender a representar cada chamada de função.

Ao escrever uma função recursiva, comece decidindo como deseja sair da função. Em seguida, determine como configurar seu loop. Identifique quais informações precisam ser enviadas para a próxima chamada de função e o que precisa ser retornado.

A melhor maneira de aprender a recursão é praticá-la e aprender com seus erros. Observe alguns de seus códigos antigos e desafie-se a reescrever loops como funções recursivas. Provavelmente não tornará seu código mais eficiente, mas será uma boa prática.


Como usar Python como uma calculadora de linha de comando

Como usar Python como uma calculadora de linha de comando

Embora você possa usar uma calculadora gráfica em seu computador, o interpretador da linguagem de programação Python pode funcionar como uma calculadora de mesa. É uma piada de corrida tão popular na comunidade Python que foi mencionada no tutorial oficial. Veja como você pode usar Python como calculadora.

Os 8 melhores blogs Java para programadores

Os 8 melhores blogs Java para programadores

Como programador, você deve enfrentar desafios para sobreviver e construir algumas maravilhas no campo de desenvolvimento ou programação. Portanto, se você está procurando aprender uma linguagem de programação avançada para aprimorar suas habilidades profissionais, Java é um dos melhores candidatos.

7 comandos vitais para começar a usar Python para iniciantes

7 comandos vitais para começar a usar Python para iniciantes

Aprender uma nova linguagem de programação como Python torna-se fácil se você tiver um roteiro abrangente detalhando quais conceitos aprender como um iniciante e como progredir ainda mais para alcançar o próximo marco. Mesmo os programadores intermediários devem freqüentemente revisar seus fundamentos para construir uma base sólida para si mesmos.

Princípios de Web Design Responsivo

Princípios de Web Design Responsivo

Hoje em dia, é prática comum construir um site ou aplicativo que ajusta sua interface de usuário dependendo do navegador ou do dispositivo. Existem duas abordagens para atingir esse objetivo. O primeiro envolve a criação de diferentes versões de seu site ou aplicativo para diferentes dispositivos. Mas é ineficiente e pode levar a erros imprevisíveis.

Como contar o número de dígitos em um número usando C ++, Python e JavaScript

Como contar o número de dígitos em um número usando C ++, Python e JavaScript

Trabalhar com números é parte integrante da programação. Cada linguagem de programação fornece suporte para manipular números de muitas maneiras diferentes. Neste artigo, você aprenderá como encontrar o número total de dígitos em um inteiro usando abordagens iterativas, baseadas em log e baseadas em string.

As 9 melhores alternativas do Docker para gerenciamento de contêineres

As 9 melhores alternativas do Docker para gerenciamento de contêineres

Os contêineres são altamente benéficos para o desenvolvimento, implantação e gerenciamento de software em um ambiente virtual. O Docker é útil no processo de conteinerização, mas não é a única plataforma disponível. Se você estiver procurando por alternativas ao Docker, não procure mais. Esta lista mostra algumas alternativas do Docker ricas em recursos e eficientes para usar em seu próximo projeto.

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

Como incorporar tweets em suas postagens do WordPress

Como incorporar tweets em suas postagens do WordPress

Incorporar serviços de terceiros em suas postagens do WordPress é uma maneira empolgante de cativar o interesse de um visitante. O conteúdo incorporado também fornece dicas visuais que tornam a digitalização mais fácil. O WordPress facilitou a adição desse tipo de conteúdo.

Como excluir a pasta de módulos de nó com npkill

Como excluir a pasta de módulos de nó com npkill

Node.js é um ambiente de tempo de execução JavaScript que permite executar JavaScript fora dos navegadores da web, tornando-o uma escolha popular para o desenvolvimento de todos os tipos de aplicativos. Parte de sua popularidade se deve à grande quantidade de pacotes NPM disponíveis para facilitar a experiência do desenvolvedor.

Como escrever e compilar seu primeiro código de Solidity

Como escrever e compilar seu primeiro código de Solidity

Solidity é a linguagem de programação usada por contratos inteligentes na blockchain Ethereum. É uma linguagem de programação orientada a objetos com tipagem estática.

Os 5 principais emblemas que irão turbinar seu repositório GitHub

Os 5 principais emblemas que irão turbinar seu repositório GitHub

Os emblemas do GitHub podem aumentar a legibilidade de um repositório, fornecendo aos usuários uma maneira rápida de capturar as métricas do repositório. Badges podem ser embutidos em seu README.md para esclarecer a importância e necessidade de seu projeto para outros desenvolvedores. Como resultado, os leitores têm uma ideia muito rápida do repositório, verificando os emblemas anexados.

O que é o Dia Internacional do Programador? 3 maneiras de comemorar este ano

O que é o Dia Internacional do Programador? 3 maneiras de comemorar este ano

Os dias comemorativos internacionais são uma boa forma de dar reconhecimento a questões sociais, dias históricos e respetivas carreiras. O Dia Internacional do Programador celebra o papel que os programadores desempenham para melhorar a vida cotidiana. O mundo civilizado em que vivemos é produto do trabalho árduo dos programadores.

Como funciona o método Python String format ()? 10 exemplos

Como funciona o método Python String format ()? 10 exemplos

Quer seja uma consulta de banco de dados ou resultados de operações matemáticas, o método de formato de string Python oferece uma maneira mais dinâmica e atraente de apresentar os resultados a um usuário.

Visual Studio 2022 vs. 2019: você deve atualizar agora? Explicado

Visual Studio 2022 vs. 2019: você deve atualizar agora? Explicado

No início deste ano, a Microsoft lançou a versão prévia do Visual Studio 2022 no mundo selvagem da programação. Esta é uma boa notícia! É um IDE extremamente popular, mas precisa de um ajuste ou talvez até mesmo uma revisão, dado o ritmo de mudança no ecossistema DevOps no qual ele prospera.

Uma introdução simples às métricas de software

Uma introdução simples às métricas de software

Métricas de software são medidas usadas para quantificar vários aspectos de seu software. Esses aspectos podem variar de custo, qualidade e eficiência da equipe de desenvolvimento.

Como instalar o .NET Framework versão 3.5 no Windows 10

Como instalar o .NET Framework versão 3.5 no Windows 10

Como um usuário do Windows, você provavelmente já se deparou com as palavras .NET Framework pelo menos uma vez. É uma estrutura de software desenvolvida pela Microsoft que permite criar e executar programas C #, C ++, F # e Visual Basic. A versão mais recente do .NET é 4.8, mas seu computador pode precisar de uma versão mais antiga do .NET (como .NET 3.5) para executar alguns aplicativos.

Flask ou CherryPy: Qual framework Python você deve usar?

Flask ou CherryPy: Qual framework Python você deve usar?

Se você é um desenvolvedor Python, pode se beneficiar muito com a variedade de estruturas disponíveis. Embora algumas estruturas sejam mais adequadas para grandes ecossistemas, outras se especializam em atender a objetivos de desenvolvimento específicos. Continue lendo para aprender os recursos básicos, usos e diferenças entre dois frameworks Python: Flask e CherryPy.

Como encontrar cubos e quadrados perfeitos de N dígitos usando Python, C ++ e JavaScript

Como encontrar cubos e quadrados perfeitos de N dígitos usando Python, C ++ e JavaScript

Muitos programadores adoram resolver problemas matemáticos complicados usando código. Ajuda a aguçar a mente e melhorar as habilidades de resolução de problemas. Neste artigo, você aprenderá a encontrar os menores e os maiores quadrados e cubos perfeitos de n dígitos usando Python, C ++ e JavaScript. Cada exemplo também contém uma saída de amostra para vários valores diferentes.

Como adicionar Python à variável PATH do Windows

Como adicionar Python à variável PATH do Windows

A execução do Python a partir do terminal costuma ser inevitável. No entanto, se você acabou de instalar o Python no Windows 10 pela primeira vez, executá-lo por meio do Terminal do Windows só será possível se for adicionado à variável de ambiente PATH do Windows.

Como usar a instrução if do Python

Como usar a instrução if do Python

A instrução if é a força motriz da programação lógica. Como resultado, um melhor domínio do Python é um acréscimo significativo às suas habilidades de programação em Python.

Como usar Python como uma calculadora de linha de comando

Como usar Python como uma calculadora de linha de comando

Embora você possa usar uma calculadora gráfica em seu computador, o interpretador da linguagem de programação Python pode funcionar como uma calculadora de mesa. É uma piada de corrida tão popular na comunidade Python que foi mencionada no tutorial oficial. Veja como você pode usar Python como calculadora.

Os 8 melhores blogs Java para programadores

Os 8 melhores blogs Java para programadores

Como programador, você deve enfrentar desafios para sobreviver e construir algumas maravilhas no campo de desenvolvimento ou programação. Portanto, se você está procurando aprender uma linguagem de programação avançada para aprimorar suas habilidades profissionais, Java é um dos melhores candidatos.

7 comandos vitais para começar a usar Python para iniciantes

7 comandos vitais para começar a usar Python para iniciantes

Aprender uma nova linguagem de programação como Python torna-se fácil se você tiver um roteiro abrangente detalhando quais conceitos aprender como um iniciante e como progredir ainda mais para alcançar o próximo marco. Mesmo os programadores intermediários devem freqüentemente revisar seus fundamentos para construir uma base sólida para si mesmos.

Princípios de Web Design Responsivo

Princípios de Web Design Responsivo

Hoje em dia, é prática comum construir um site ou aplicativo que ajusta sua interface de usuário dependendo do navegador ou do dispositivo. Existem duas abordagens para atingir esse objetivo. O primeiro envolve a criação de diferentes versões de seu site ou aplicativo para diferentes dispositivos. Mas é ineficiente e pode levar a erros imprevisíveis.

Como contar o número de dígitos em um número usando C ++, Python e JavaScript

Como contar o número de dígitos em um número usando C ++, Python e JavaScript

Trabalhar com números é parte integrante da programação. Cada linguagem de programação fornece suporte para manipular números de muitas maneiras diferentes. Neste artigo, você aprenderá como encontrar o número total de dígitos em um inteiro usando abordagens iterativas, baseadas em log e baseadas em string.

As 9 melhores alternativas do Docker para gerenciamento de contêineres

As 9 melhores alternativas do Docker para gerenciamento de contêineres

Os contêineres são altamente benéficos para o desenvolvimento, implantação e gerenciamento de software em um ambiente virtual. O Docker é útil no processo de conteinerização, mas não é a única plataforma disponível. Se você estiver procurando por alternativas ao Docker, não procure mais. Esta lista mostra algumas alternativas do Docker ricas em recursos e eficientes para usar em seu próximo projeto.

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

SQL vs. NoSQL: Qual é o melhor banco de dados para seu próximo projeto?

Como incorporar tweets em suas postagens do WordPress

Como incorporar tweets em suas postagens do WordPress

Incorporar serviços de terceiros em suas postagens do WordPress é uma maneira empolgante de cativar o interesse de um visitante. O conteúdo incorporado também fornece dicas visuais que tornam a digitalização mais fácil. O WordPress facilitou a adição desse tipo de conteúdo.

Como excluir a pasta de módulos de nó com npkill

Como excluir a pasta de módulos de nó com npkill

Node.js é um ambiente de tempo de execução JavaScript que permite executar JavaScript fora dos navegadores da web, tornando-o uma escolha popular para o desenvolvimento de todos os tipos de aplicativos. Parte de sua popularidade se deve à grande quantidade de pacotes NPM disponíveis para facilitar a experiência do desenvolvedor.

Como escrever e compilar seu primeiro código de Solidity

Como escrever e compilar seu primeiro código de Solidity

Solidity é a linguagem de programação usada por contratos inteligentes na blockchain Ethereum. É uma linguagem de programação orientada a objetos com tipagem estática.