Você está na página 1de 32

Algoritmos Recursivos

Annabell D.R. Tamariz

Captulo 4
Algoritmos Recursivos

Informaes da matria

Recursividade

Algoritmos Recursivos
Conceito de Recursividade
Caractersticas

Aulas de Estrutura de Dados I

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

Algoritmos Recursivos

Ementa

Annabell D.R. Tamariz

Abstrao de Dados.
Alocao Esttica e Dinmica.

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade

Listas lineares.
Pilhas e Filas:
Algoritmos Recursivos.

Conceito de Recursividade.
Caractersticas.
Exerccios.
Aplicaes

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

Matrizes esparsas. Listas Generalizadas.


Algoritmos de classificao e busca.

4.2

Contedo Programtico

Algoritmos Recursivos
Annabell D.R. Tamariz

1 Algoritmos Recursivos

Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

Informaes da matria
Algoritmos Recursivos
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

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

Algoritmos Recursivos
Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

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 finita 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

Algoritmos Recursivos
Conceito de Recursividade

Em termos de programao, uma rotina recursiva

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


indireta.
Podemos expressar uma rotina recursiva como uma

Caractersticas
Exerccios
Aplicaes

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

Algoritmos Recursivos

Introduo

Annabell D.R. Tamariz

Recursividade

Informaes da matria
Algoritmos Recursivos

Entretanto, pode-se ter tambm uma forma indireta de

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]

Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

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?

Algoritmos Recursivos
Conceito de Recursividade
Caractersticas

Alguma coisa recursiva quando definida em termos

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

Exerccios
Aplicaes

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

Algoritmos Recursivos
Conceito de Recursividade

Se se atingiu o cimo das escadas, a tarefa subir as


escadas est, obviamente terminada;
Caso contrrio, se o cimo no tiver sido atingido:

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

1
2
3

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

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 ficaria uma


funo em C para somar os nmeros menores do que 10?
(Fazer em forma recursiva e iterativa)

4.10

Recursividade

Algoritmos Recursivos
Annabell D.R. Tamariz

Algoritmo Iterativo/Recursivo

#include<stdio.h>
int iterativa(int i){

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade
Caractersticas

int total=0;

Exerccios
Aplicaes

while i<10 {
total += i;

Exerccios em Sala de
aula
Prxima Aula....

i++ }
return total; }
int recursiva(int i){
if i<10
return i+recursiva(i+1);
return 0;}
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));

Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

getchar();
return 0;}

4.12

Recursividade

Algoritmos Recursivos
Annabell D.R. Tamariz

Informaes da matria

Caractersticas

Algoritmos Recursivos
Conceito de Recursividade

Toda vez que uma funo iniciada recursivamente, um

novo conjunto de variveis locais e de parmetros


alocado, e somente esse novo conjunto pode ser
referenciado dentro dessa chamada.

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

Quando ocorre um retorno de uma funo recursiva

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

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade

Todo algoritmo deve ser executado em tempo finito, isto

, deve terminar aps ter executado uma quantidade


finita de passos.
Para garantir que uma chamada recursiva no criar um

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

looping que ser executado infinitamente, 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

Definio

Algoritmos Recursivos
Conceito de Recursividade

Na prtica, ao definir uma rotina recursiva, dividimos o

problema da seguinte maneira:


Soluo trivial: dada por definio; isto , no necessita

da recurso para ser obtida.

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

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

Algoritmos Recursivos
Conceito de Recursividade

Soluo trivial: 0! = 1 (dada por definio);

Soluo geral: n! = n * (n-1)! (requer reaplicao da


rotina para (n-1)!)

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

Considerando f(n) = n, ento n=0 implica numa


condio de parada do mecanismo recursivo, garantindo
o trmino do algoritmo que calcula o fatorial.

4.16

Recursividade

Algoritmos Recursivos
Annabell D.R. Tamariz

O algoritmo recursivo para computar n! Pode ser


diretamente traduzido numa funo em C.
Algoritmo Recursivo do Factorial

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade

#include<stdio.h>
int fatorial(n) {
if (n==0)

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

return 1;
return n*fatorial(n-1);}
int main(){
printf("%i",fatorial(4));
getchar();}

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?

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade

Est pergunta bastante difcil de responder, pois

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.

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

preciso analisar o problema e verificar se realmente

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

atravs de uma pilha criada e mantida,


automaticamente, pelo sistema (como visto na definio
de pilhas).
Na verdade quando uma rotina evocada, no apenas

Algoritmos Recursivos
Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

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 definir 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

Algoritmos Recursivos
Annabell D.R. Tamariz

Pilhas e rotinas recursivas


Perceba que, para imprimir de forma decrescente uma

lista ordenada, basta imprimir em ordem decrescente


todos os seus elementos, exceto o primeiro deles; que
ser impresso logo em seguida.

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

Cada vez que uma chamada recursiva funo Show()

executada, uma nova verso da varavel L criada


para armazenar o valor e L.prox.

Exerccios em Sala de
aula
Prxima Aula....

Assim, a chamada recursiva faz com que sejam

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

Informaes da matria
Algoritmos Recursivos

fcil perceber que a recurso na rotina Show() tem

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(),

Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

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

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

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

4.27

Aplicaes

Algoritmos Recursivos
Annabell D.R. Tamariz

Concluses

Informaes da matria
Algoritmos Recursivos

Normalmente, as rotinas assim modificadas sero mais

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.

Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

Um algoritmo claro, simples e conciso vale mais que

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

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

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

4.29

Exerccios em Sala

Algoritmos Recursivos
Annabell D.R. Tamariz

Soluo

#include<stdio.h>
intvetor[10 ;]
void preencheVetor(int indice) {

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade

if(indice<10) {
vetor[indice + + =1;]
preencheVetor(indice);
}

Caractersticas
Exerccios
Aplicaes

Exerccios em Sala de
aula
Prxima Aula....

}
void imprimeVetor(int indice) {
If (indice<10) {
printf("%i ",vetor[indice++ );]
imprimeVetor(indice);
}
}

4.30

Exerccios em Sala

Algoritmos Recursivos
Annabell D.R. Tamariz

Informaes da matria

Soluo - Continuao

Algoritmos Recursivos
Conceito de Recursividade
Caractersticas

int main() {

Exerccios
Aplicaes

preencheVetor(0);

Exerccios em Sala de
aula

imprimeVetor(0);

Prxima Aula....

getchar();
return 0; }

4.31

Prxima aula ...

Algoritmos Recursivos
Annabell D.R. Tamariz

Informaes da matria
Algoritmos Recursivos
Conceito de Recursividade
Caractersticas
Exerccios
Aplicaes

Listas Generalizadas.

Matrizes Esparsas.

Exerccios em Sala de
aula
Prxima Aula....

4.32