Você está na página 1de 32

Algoritmos Recursivos Annabell D.R.

Tamariz

Captulo 4
Algoritmos Recursivos
Recursividade Aulas de Estrutura de Dados I
Informaes da matria Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

Annabell D.R. Tamariz LCMAT-CCI www.lcmat.uenf.br/professores/annabell Universidade Estadual do Norte Fluminense - UENF
4.1

Ementa

Algoritmos Recursivos Annabell D.R. Tamariz

Abstrao de Dados. Alocao Esttica e Dinmica. Listas lineares. Pilhas e Filas: Algoritmos Recursivos.

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

Conceito de Recursividade. Caractersticas. Exerccios. Aplicaes

Matrizes esparsas. Listas Generalizadas. Algoritmos de classicao e busca.

4.2

Contedo Programtico

Algoritmos Recursivos Annabell D.R. Tamariz

1 Algoritmos Recursivos

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

2 Exerccios em Sala de aula

3 Prxima Aula....

4.3

Introduo

Algoritmos Recursivos Annabell D.R. Tamariz

Recursividade
Informaes da matria

Vamos entender por algoritmo recursivo, aquele

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

algoritmo que para resolver um problema divide-o em subproblemas mais simples, cujas solues requerem a aplicao dele mesmo.
A linguagem C permite que um programador escreva

Exerccios em Sala de aula Prxima Aula....

funes que chamem a si mesmas. Tais rotinas so denominada recursivas.


Processo de resoluo(de uma equao, de um

problema) mediante uma seqencia nita de operaes em que o objeto de cada uma o resultado da que a precede

4.4

Introduo

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Recursividade Em termos de programao, uma rotina recursiva

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

quando ela chama a si mesma, seja de forma direta ou indireta.


Podemos expressar uma rotina recursiva como uma

Exerccios em Sala de aula Prxima Aula....

composio formada por um conjunto de comandos C e uma chamada rotina R :


R = [C, R] Recurso direta

4.5

Introduo

Algoritmos Recursivos Annabell D.R. Tamariz

Recursividade Entretanto, pode-se ter tambm uma forma indireta de

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

recurso, na qual as rotinas so conectadas atravs de uma cadeia de chamadas sucessivas que acaba retornando primeira que foi chamada: R1 = [C1, R2] R2 = [C2, R3] R3 = [C3, R4] ....... Rn = [Cn, R1]

Exerccios em Sala de aula Prxima Aula....

4.6

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.7

Introduo

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

O que um problema recursivo? Alguma coisa recursiva quando denida em termos

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

dela prpria.
Exemplo da aritmtica que d a denio dos nmeros

Exerccios em Sala de aula Prxima Aula....

naturais:
primeiro natural o zero. sucessor de um nmero natural um nmero natural.

4.8

Recursividade - Exemplo

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Tarefa: subir as escadas


1

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

Se se atingiu o cimo das escadas, a tarefa subir as escadas est, obviamente terminada; Caso contrrio, se o cimo no tiver sido atingido:
1 2 3

Exerccios em Sala de aula Prxima Aula....

Avanar um degrau, na direo do cimo das escadas e Retomar a tarefa subir as escadas. Notar que ao retomar a tarefa, a dimenso do problema diminuiu, pois j se avano mais um degrau.

4.9

Recursividade - Exemplo

Algoritmos Recursivos Annabell D.R. Tamariz

Algoritmo Iterativo
1

Informaes da matria Algoritmos Recursivos

Tarefa subir escadas:


Enquanto no atingir o topo Subir um degrau

Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

Exerccio

Seguindo a idia de subir as escadas, como caria uma funo em C para somar os nmeros menores do que 10? (Fazer em forma recursiva e iterativa)

4.10

Recursividade
Algoritmo Iterativo/Recursivo

Algoritmos Recursivos Annabell D.R. Tamariz

#include<stdio.h> int iterativa(int i){ int total=0; while i<10 { total += i; i++ } return total; } int recursiva(int i){ if i<10 return i+recursiva(i+1); return 0;}

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.11

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos

Algoritmo Iterativo/Recursivo

Conceito de Recursividade Caractersticas Exerccios

int main() { printf(" $nIterativa :%i $nRecursiva: %i",iterativa(0),recursiva(0)); getchar(); return 0;}

Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.12

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Caractersticas Toda vez que uma funo iniciada recursivamente, um

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

novo conjunto de variveis locais e de parmetros alocado, e somente esse novo conjunto pode ser referenciado dentro dessa chamada.
Quando ocorre um retorno de uma funo recursiva

Exerccios em Sala de aula Prxima Aula....

para um ponto numa chamada anterior, a alocao mais recente dessas variveis liberada, e a cpia anterior reativada.

4.13

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Condies da Recursividade Todo algoritmo deve ser executado em tempo nito, isto

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

, deve terminar aps ter executado uma quantidade nita de passos.


Para garantir que uma chamada recursiva no criar um

Exerccios em Sala de aula Prxima Aula....

looping que ser executado innitamente, necessrio que ela esteja condicionada a uma expresso lgica (T) que, em algum instante, tornar-se- falsa e permitir que a recurso termine.

4.14

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Denio Na prtica, ao denir uma rotina recursiva, dividimos o

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

problema da seguinte maneira:


Soluo trivial : dada por denio; isto , no necessita

Exerccios em Sala de aula Prxima Aula....

da recurso para ser obtida.


Soluo geral : parte do problema que em essncia

igual ao problema original, sendo, porm menor. A soluo, neste caso, pode ser obtida por uma chamada recursiva R(x-1).

4.15

Recursividade - Exemplo

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Fatorial de um nmero natural


1 2

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

Soluo trivial : 0! = 1 (dada por denio); Soluo geral : n! = n * (n-1)! (requer reaplicao da rotina para (n-1)!) Considerando f(n) = n, ento n=0 implica numa condio de parada do mecanismo recursivo, garantindo o trmino do algoritmo que calcula o fatorial.

Exerccios em Sala de aula Prxima Aula....

4.16

Recursividade O algoritmo recursivo para computar n! Pode ser diretamente traduzido numa funo em C.
Algoritmo Recursivo do Factorial

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

#include<stdio.h> int fatorial(n) { if (n==0) return 1; return n*fatorial(n-1);} int main(){ printf("%i",fatorial(4)); getchar();}

Exerccios em Sala de aula Prxima Aula....

4.17

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.18

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.19

Exerccios no Computador

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Vide arquivo "Recursividade.pdf"

Exerccios em Sala de aula Prxima Aula....

4.20

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Quando aplicar recurso? Est pergunta bastante difcil de responder, pois

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

teramos que comparar as possveis solues: recursiva e iterativa!!!. Enquanto alguns problemas tm soluo imediata com o uso da recurso, outros ao praticamente impossveis de se resolver de forma recursiva.
preciso analisar o problema e vericar se realmente

Exerccios em Sala de aula Prxima Aula....

vale a pena tentar encontrar uma soluo recursiva.

4.21

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Pilhas e rotinas recursivas


Informaes da matria

O controle de chamadas e retornos de rotinas feito

Algoritmos Recursivos
Conceito de Recursividade Caractersticas Exerccios Aplicaes

atravs de uma pilha criada e mantida, automaticamente, pelo sistema (como visto na denio de pilhas).
Na verdade quando uma rotina evocada, no apenas

Exerccios em Sala de aula Prxima Aula....

o endereo de retorno empilhado, mas todas as suas variveis locais so tambm recriadas na pilha.
Para compreender a relao existente entre recurso e

o uso de pilhas, vamos denir uma rotina recursiva para imprimir em ordem decrescente uma lista que foi ordenada de forma crescente.

4.22

Recursividade

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.23

Aplicaes
Pilhas e rotinas recursivas Perceba que, para imprimir de forma decrescente uma

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

lista ordenada, basta imprimir em ordem decrescente todos os seus elementos, exceto o primeiro deles; que ser impresso logo em seguida.
Cada vez que uma chamada recursiva funo Show()

executada, uma nova verso da varavel L criada para armazenar o valor e L.prox.
Assim, a chamada recursiva faz com que sejam

Exerccios em Sala de aula Prxima Aula....

guardados na pilha os endereos de todos os nodos da lista, at que no haja mais nodos (lista vazia).
Neste momento, as chamadas recursivas comeam a

retornar o controle para a instruo writeln(...), que vai imprimindo os elementos da lista, um a um, em ordem inversa.

4.24

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Pilhas e rotinas recursivas fcil perceber que a recurso na rotina Show() tem

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

como nico objetivo simular uma pilha, onde os endereos dos nodos devem aguardar at que os elementos possam ser impressos.
Agora vamos obter o mesmo efeito da rotina Show(),

Exerccios em Sala de aula Prxima Aula....

usando uma pilha no lugar da recurso


Qualquer tipo de recurso pode ser eliminado se

utilizarmos no seu lugar comandos de repetio e, eventualmente, pilhas.

4.25

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.26

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Exemplo da Pilha

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Vamos mostrar o que acontece com a chamada fatorial de 4:

Exerccios em Sala de aula Prxima Aula....

4.27

Aplicaes

Algoritmos Recursivos Annabell D.R. Tamariz

Concluses Normalmente, as rotinas assim modicadas sero mais

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

rpidas que suas correspondentes em verso recursiva.


Entretanto, se o uso de muitos comandos de repetio e

vrias pilhas for necessrio para realizar a converso da verso recursiva para a iterativa, talvez seja melhor permanecer com a rotina recursiva.
Um algoritmo claro, simples e conciso vale mais que

Exerccios em Sala de aula Prxima Aula....

qualquer algoritmo envenenado que rode um pouquinho mais rpido.

4.28

Exerccios em Sala

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Implementar em C um algoritmo para preencher recursivamente um vetor de inteiros de 10 posies com o valor 1 Implementar em C um algoritmo para imprimir recursivamente o vetor de inteiros de 10 posies

Exerccios em Sala de aula Prxima Aula....

4.29

Exerccios em Sala
Soluo

Algoritmos Recursivos Annabell D.R. Tamariz

#include<stdio.h> intvetor[10 ;] void preencheVetor(int indice) { if(indice<10) { vetor[indice + + =1;] preencheVetor(indice); } } void imprimeVetor(int indice) { If (indice<10) { printf("%i ",vetor[indice++ );] imprimeVetor(indice); } }
4.30

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

Exerccios em Sala

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria

Soluo - Continuao

Algoritmos Recursivos
Conceito de Recursividade Caractersticas

int main() { preencheVetor(0); imprimeVetor(0); getchar(); return 0; }

Exerccios Aplicaes

Exerccios em Sala de aula Prxima Aula....

4.31

Prxima aula ...

Algoritmos Recursivos Annabell D.R. Tamariz

Informaes da matria Algoritmos Recursivos


Conceito de Recursividade Caractersticas Exerccios Aplicaes

1 2

Listas Generalizadas. Matrizes Esparsas.

Exerccios em Sala de aula Prxima Aula....

4.32

Você também pode gostar