Dicas de Estudos, Carreira e Vida Profissional no Blog da FASPEC

Confira dicas e artigos sobre Educação, Rotinas de Trabalho e Estudo, Carreiras Profissionais e Mais no Blog da FASPEC. Acesse agora!

Estrutura de Dados: Noções de Recursividade

recursividade é um conceito muito importante na ciência da computação, pois permite resolver problemas complexos de forma simples e elegante. Mas o que é recursividade? Como ela funciona? E quais são as suas vantagens e desvantagens? Neste post, vamos responder a essas perguntas e mostrar alguns exemplos de como usar a recursividade em estruturas de dados.

O que é recursividade?

Recursividade é uma técnica de programação que consiste em definir uma função ou um algoritmo que chama a si mesmo, direta ou indiretamente, até atingir uma condição de parada. Ou seja, é uma forma de expressar uma solução em termos de uma versão menor do mesmo problema.

Por exemplo, imagine que você quer calcular o fatorial de um número inteiro positivo n, que é definido como o produto de todos os números naturais de 1 até n. Uma forma de fazer isso é usar um laço de repetição, como neste pseudocódigo:

fatorial(n):
resultado = 1
para i de 1 até n:
resultado = resultado * i
retorne resultado

Mas há outra forma de fazer isso, usando recursividade. Nesse caso, podemos definir o fatorial de n em termos do fatorial de n-1, como neste pseudocódigo:

fatorial(n):
se n == 0 ou n == 1:
retorne 1
senão:
retorne n * fatorial(n-1)

A cada chamada recursiva, a função cria uma nova instância de si mesma, com um novo valor de n. Essas instâncias são armazenadas em uma estrutura de dados chamada pilha, que segue o princípio de LIFO (Last In, First Out), ou seja, o último a entrar é o primeiro a sair. Assim, a primeira instância a ser criada é a última a ser finalizada, e vice-versa.

Quando a função atinge o caso base, ela retorna o valor 1 e encerra a sua instância. Esse valor é então usado pela instância anterior, que multiplica pelo seu valor de n e retorna o resultado. Esse processo se repete até que todas as instâncias sejam finalizadas e o valor final seja obtido.

Para escolher o texto adequado, você pode fazer uma pesquisa prévia na internet, em bibliotecas, em livrarias ou em outras fontes de informação. Você também pode pedir recomendações de outras pessoas que tenham o mesmo objetivo ou interesse que você. Além disso, você pode fazer uma leitura rápida do texto, observando o título, o autor, a data, o resumo, o índice, a introdução e a conclusão, para verificar se ele atende aos seus critérios.

Quais são as vantagens e desvantagens da recursividade?

A recursividade tem algumas vantagens e desvantagens em relação à programação iterativa, que usa laços de repetição. Vamos ver algumas delas:

Vantagens

-A recursividade pode tornar o código mais simples, claro e elegante, pois evita o uso de variáveis auxiliares e estruturas de controle complexas.

-A recursividade pode facilitar a solução de problemas que têm uma natureza recursiva, ou seja, que podem ser divididos em subproblemas menores e semelhantes ao original. Alguns exemplos são: busca e ordenação em árvores binárias, permutação de elementos, torre de Hanói, etc.

Desvantagens

-A recursividade pode consumir mais memória e tempo de execução, pois cria várias instâncias da mesma função, que ocupam espaço na pilha e precisam ser gerenciadas pelo sistema operacional.

-A recursividade pode causar erros de estouro de pilha (stack overflow), que ocorrem quando a pilha atinge o seu limite máximo de armazenamento e não pode mais acomodar novas instâncias. Isso pode acontecer se a função recursiva não tiver um caso base bem definido ou se o caso base for muito distante do valor inicial.

Como usar a recursividade em estruturas de dados?

A recursividade pode ser usada para implementar ou manipular diversas estruturas de dados, especialmente aquelas que têm uma estrutura hierárquica ou ramificada, como árvores, listas encadeadas, grafos, etc. Vamos ver alguns exemplos:

Árvores

Uma árvore é uma estrutura de dados que representa uma relação de hierarquia entre os seus elementos, chamados de nós. Cada nó pode ter zero ou mais filhos, que são outros nós que dependem dele. O nó que não tem nenhum pai é chamado de raiz. O nó que não tem nenhum filho é chamado de folha.

Uma forma de implementar uma árvore é usando uma classe ou estrutura que contém um valor e uma lista de ponteiros para os seus filhos, como neste pseudocódigo:

classe No:
valor
lista de filhos

Para percorrer uma árvore, podemos usar um algoritmo recursivo que visita cada nó e executa alguma ação, como imprimir o seu valor, por exemplo. Há três formas principais de fazer isso, dependendo da ordem em que os nós são visitados: pré-ordemem-ordem e pós-ordem. Veja o pseudocódigo de cada uma delas:

pre_ordem(no):
se no não é nulo:
imprima no.valor
para cada filho em no.filhos:
pre_ordem(filho)

em_ordem(no):
se no não é nulo:
se no.filhos não está vazio:
em_ordem(no.filhos[0])
imprima no.valor
se no.filhos tem mais de um elemento:
para i de 1 até no.filhos.tamanho – 1:
em_ordem(no.filhos[i])

pos_ordem(no):
se no não é nulo:
para cada filho em no.filhos:
pos_ordem(filho)
imprima no.valor

Listas encadeadas

Uma lista encadeada é uma estrutura de dados que representa uma sequência de elementos, chamados de nós. Cada nó contém um valor e um ponteiro para o próximo nó da lista. O primeiro nó é chamado de cabeça. O último nó é chamado de cauda e aponta para nulo.

Uma forma de implementar uma lista encadeada é usando uma classe ou estrutura que contém um valor e um ponteiro para o próximo nó, como neste pseudocódigo:

classe No:
valor
proximo

Para percorrer uma lista encadeada, podemos usar um algoritmo recursivo que visita cada nó e executa alguma ação, como imprimir o seu valor, por exemplo. Veja o pseudocódigo:

percorrer(no):
se no não é nulo:
imprima no.valor
percorrer(no.proximo)
 
 
 

Neste post, vimos o que é recursividade, como ela funciona, quais são as suas vantagens e desvantagens, e como usá-la em estruturas de dados. A recursividade é uma técnica poderosa e elegante, mas que requer cuidado e atenção para evitar erros e ineficiências. Esperamos que este post tenha sido útil e que você possa aplicar a recursividade nos seus projetos.

Se você quer deseja fazer parte das pessoas que amam a educação, matricule-se agora em dos curso da Faspec.

Se você quer saber mais sobre esse assunto, clique aqui e conheça agora os nossos cursos da FASPEC, ou matricule-se agora e descubra um mundo de oportunidades

Contact Form Blog Faspec