Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Recursividade e Estruturas de Dados: Exercícios e Demonstrações, Notas de estudo de Engenharia Telemática

Exercícios e demonstrações sobre recursividade e sua aplicabilidade em estruturas de dados, como filas e pilhas. O autor fornece códigos em c e explica a lógica por trás de cada algoritmo recursivo. Além disso, são discutidas aplicabilidades em fractais e estruturas de dados.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 24

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Recursividade
Elloá B. Guedes
http://sites.google.com/site/elloaguedes
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18

Pré-visualização parcial do texto

Baixe Recursividade e Estruturas de Dados: Exercícios e Demonstrações e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Recursividade

Elloá B. Guedes [email protected] http://sites.google.com/site/elloaguedes

Exercícios

  • Projete um algoritmo que soma dois números de forma recursiva - int soma(int a, int b) - Caso base 1 + 1 = 2

Exercícios

  • Somatório dos elementos de 1 até n
  • Soma dos elementos de um array
  • Encontrar o menor elemento em um array

Exercícios

  • Faça uma função recursiva que calcule o valor da série S descrita a seguir para um valor n>0 a ser fornecido como parâmetro para a - S = 1 + 1/1! + 1/2! + 1/3! + 1 /n!

Aplicações em Estruturas de Dados

  • É possível utilizar recursividade em diversas estruturas de dados - Filas - Pilhas - Árvores, etc.

Fila Simplesmente Encadeada

  • Apontador para o início da fila
    • Enfileira
    • Desenfileira
    • Tamanho da fila
    • Imprimir fila

Tamanho da Fila

int tamanhoFila(TFila p){ if (filaVazia(p) == xtrue) return 0; int contador = 0; while (p != NULL){ contador++; p = p->prox; } return contador; }

Tamanho da Fila

  • Observar este trecho com atenção while (p != NULL){ contador++; p = p->prox; }
  • Se o próximo não é NULL
    • Incrementa contador
    • Repete o processo para o próximo elemento
    • Idéia para implementar uma solução recursiva!

Enfileira – Trecho de Código

if ((tamanhoFila(*p)) == 0) { *p = aux; } else { while (itera->prox != NULL){ itera = itera->prox; }

itera->prox = aux; }

Enfileira

  • Enquanto o atual->prox for diferente de NULL - Caminha para o atual->prox->prox - Repete o procedimento - Possibilidade de solução recursiva
  • Situação a ser considerada
    • Fila Vazia

Imprimir Fila Recursivo

  • Analogia com o tamanho da fila
    • Ao invés de somar a cada nodo encontrado, deve imprimir o dado do nodo.

Imprimir Fila Recursivo

  • Alteração na chamada da função
    • Impressão dos delimitadores “[“ e “]” deve ser feita separadamente

printf("\n["); imprimeFilaRecursivo(fila); printf("]\n");

Pilha Encadeada

  • Apontador para o topo da pilha
    • Empilha
    • Desempilha
    • Tamanho da pilha
    • Impressão da pilha

Pilha Encadeada

/* Definicao dos nodos da pilha */ typedef struct stnop { int dado; struct stnop *prox; } nopilha;

typedef nopilha* TPilha;