Você está na página 1de 49

Recurs ao Chamadas Recursivas EDA Edson Recurs ao

Deni ca o Exemplos de recurs ao

Estruturas de Dados e Algoritmos


Recurs ao Prof. Edson Alves - UnB/FGA Bras lia, 02/2012

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA

Recurs ao Chamadas Recursivas

Edson Recurs ao
Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o

Recurs ao

A denic ao de um objeto e dita recursiva se ela se refere ao pr oprio elemento a ser denido

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o

Recurs ao

A denic ao de um objeto e dita recursiva se ela se refere ao pr oprio elemento a ser denido Uma denic ao recursiva tem duas partes: o caso base e as regras de constru c ao

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o

Recurs ao

A denic ao de um objeto e dita recursiva se ela se refere ao pr oprio elemento a ser denido Uma denic ao recursiva tem duas partes: o caso base e as regras de constru c ao No caso base, todos os elementos estruturais b asicos s ao listados

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o

Recurs ao

A denic ao de um objeto e dita recursiva se ela se refere ao pr oprio elemento a ser denido Uma denic ao recursiva tem duas partes: o caso base e as regras de constru c ao No caso base, todos os elementos estruturais b asicos s ao listados As regras de constru c ao determinam como os elementos s ao constru dos, e envolvem o pr oprio elemento

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Denic ao dos n umeros naturais

caso base: 0 N

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Denic ao dos n umeros naturais


caso base: 0 N regra de constru c ao: Se n N , ent ao (n + 1) N

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Denic ao dos n umeros naturais


caso base: 0 N regra de constru c ao: Se n N , ent ao (n + 1) N deni c ao de escopo: N ao h a outros elementos no conjunto N (isto e, n ao h a outras formas de se obter n umeros naturais)

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Denic ao de fatorial

Chamadas Recursivas
Chamadas de fun co es

n! =

1, se n = 0 n (n 1)!, se n > 0

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exerc cio
1. Compile e execute o c odigo fatorial.c

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exerc cio
1. Compile e execute o c odigo fatorial.c 2. Identique o caso base da denic ao do fatorial

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exerc cio
1. Compile e execute o c odigo fatorial.c 2. Identique o caso base da denic ao do fatorial 3. Identique a regra de constru c ao da denic ao do fatorial

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exerc cio
1. Compile e execute o c odigo fatorial.c 2. Identique o caso base da denic ao do fatorial 3. Identique a regra de constru c ao da denic ao do fatorial 4. Execute o c odigo com as entradas 20 e 40. Justique os resultados obtidos

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

poss E vel determinar se um elemento pertence ou n ao a um conjunto de elementos denidos recursivamente aplicado a regra de construc ao sucessivamente, decompondo o elemento em elementos menores

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

poss E vel determinar se um elemento pertence ou n ao a um conjunto de elementos denidos recursivamente aplicado a regra de construc ao sucessivamente, decompondo o elemento em elementos menores Contudo, para encontrar o n- esimo termo da sequ encia, e necess ario passar por todos os elementos anteriores

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

poss E vel determinar se um elemento pertence ou n ao a um conjunto de elementos denidos recursivamente aplicado a regra de construc ao sucessivamente, decompondo o elemento em elementos menores Contudo, para encontrar o n- esimo termo da sequ encia, e necess ario passar por todos os elementos anteriores Em termos de implementa c ao, h a uma grande exig encia de mem oria

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 = 4 + 1, logo se 4 N , ent ao 5 N

Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 = 4 + 1, logo se 4 N , ent ao 5 N 4 = 3 + 1, logo se 3 N , ent ao 4 N

Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 = 4 + 1, logo se 4 N , ent ao 5 N 4 = 3 + 1, logo se 3 N , ent ao 4 N 3 = 2 + 1, logo se 2 N , ent ao 3 N

Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 4 3 2

= = = =

4 + 1, 3 + 1, 2 + 1, 1 + 1,

logo logo logo logo

se se se se

4 N, 3 N, 2 N, 1 N,

ent ao ent ao ent ao ent ao

5N 4N 3N 2N

Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 4 3 2 1

= = = = =

4 + 1, 3 + 1, 2 + 1, 1 + 1, 1+0

logo logo logo logo

se se se se

4 N, 3 N, 2 N, 1 N,

ent ao ent ao ent ao ent ao

5N 4N 3N 2N

Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Exemplo de vericac ao: 5 N ?

Chamadas Recursivas

5 4 3 2 1

= = = = =

4 + 1, 3 + 1, 2 + 1, 1 + 1, 1+0

logo logo logo logo

se se se se

4 N, 3 N, 2 N, 1 N,

ent ao ent ao ent ao ent ao

5N 4N 3N 2N

Chamadas de fun co es

Como 0 N , ent a o 1, 2 , 3 , 4 , 5 N

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

Onde for poss vel, a troca de uma denic ao recursiva por uma denic ao direta, que n ao dependa de termos anteriores, leva a implementac oes mais ecientes

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

Onde for poss vel, a troca de uma denic ao recursiva por uma denic ao direta, que n ao dependa de termos anteriores, leva a implementac oes mais ecientes A denic ao recursiva g (n ) = 1, se n = 0 2 g (n 1), se n > 0

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Deni c ao Exemplos de recurs ao EDA Edson Recurs ao

Caracter sticas da recurs ao

Onde for poss vel, a troca de uma denic ao recursiva por uma denic ao direta, que n ao dependa de termos anteriores, leva a implementac oes mais ecientes A denic ao recursiva g (n ) = 1, se n = 0 2 g (n 1), se n > 0

Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

equivale a denic ao direta g (n ) = 2n


Edson EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

EDA

Recurs ao Chamadas Recursivas

Edson Recurs ao
Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

No momento em que uma func ao e chamada, algumas tarefas s ao realizadas em plano de fundo para que o programa se comporte como esperado

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

No momento em que uma func ao e chamada, algumas tarefas s ao realizadas em plano de fundo para que o programa se comporte como esperado Se a func ao tem par ametros, eles s ao inicializados com os valores passados na chamada

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

No momento em que uma func ao e chamada, algumas tarefas s ao realizadas em plano de fundo para que o programa se comporte como esperado Se a func ao tem par ametros, eles s ao inicializados com os valores passados na chamada O sistema operacional tem que saber onde prosseguir ap os o encerramento da func ao chamada, de modo que o ponto de retorno e armazenado

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

No momento em que uma func ao e chamada, algumas tarefas s ao realizadas em plano de fundo para que o programa se comporte como esperado Se a func ao tem par ametros, eles s ao inicializados com os valores passados na chamada O sistema operacional tem que saber onde prosseguir ap os o encerramento da func ao chamada, de modo que o ponto de retorno e armazenado Quem chamou a func ao tem que ter acesso ao retorno da func ao chamada, logo uma area de mem oria e reservada para armazenar este valor
Edson EDA

Chamadas Recursivas
Chamadas de fun co es

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o

Algumas informa c oes devem ser preservadas ao se chamar uma func ao, para se manter o estado correto do programa

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o

Algumas informa c oes devem ser preservadas ao se chamar uma func ao, para se manter o estado correto do programa Em relac ao a func ao que realizou a chamada de um outra func ao, devem ser preservadas as vari aveis locais e os seus par ametros

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Chamadas de func oes

EDA Edson Recurs ao


Deni ca o

Algumas informa c oes devem ser preservadas ao se chamar uma func ao, para se manter o estado correto do programa Em relac ao a func ao que realizou a chamada de um outra func ao, devem ser preservadas as vari aveis locais e os seus par ametros Tamb em deve ser armazenado o endere co de mem oria que aponta para o lugar onde o programa deve prosseguir ap os a execu c ao da func ao chamada

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

A area de dados que armazena as informac oes listadas anteriormente e denominada registro de ativa c ao ou stack frame

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

A area de dados que armazena as informac oes listadas anteriormente e denominada registro de ativa c ao ou stack frame O registro de ativac ao e alocado dinamicamente na pilha de execu c ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

A area de dados que armazena as informac oes listadas anteriormente e denominada registro de ativa c ao ou stack frame O registro de ativac ao e alocado dinamicamente na pilha de execu c ao Este registro existe enquanto a func ao que ele se refere est a sendo executada

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

O registro de ativac ao guarda todas as informac oes necess arias para a correta execu c ao e retorno de uma func ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

O registro de ativac ao guarda todas as informac oes necess arias para a correta execu c ao e retorno de uma func ao Um registro de ativc ao e criado quando a func ao e chamada e e destru do no retorno da func ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Registro de ativac ao

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

O registro de ativac ao guarda todas as informac oes necess arias para a correta execu c ao e retorno de uma func ao Um registro de ativc ao e criado quando a func ao e chamada e e destru do no retorno da func ao Apenas o registro de ativac ao da func ao main() ca ativo durante toda a execuc ao do programa

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Visualizac ao da pilha de execuc ao no in cio do programa


Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

main()

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Visualizac ao da pilha de execuc ao ap os main() chamar a func ao f 1()


f1() Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

main()

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Visualizac ao da pilha de execuc ao p os f 1() chamar f 2()


f2() Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno Parmetros e variveis locais Ponteiro para o registro da funo fez a chamada Endereo de retorno Valor do retorno

EDA Edson Recurs ao


Deni ca o Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

f1()

main()

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

O endere co de retorno aponta para o enderec o de mem oria que cont em a instruc ao imediamente ap os a chamada da func ao

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

O endere co de retorno aponta para o enderec o de mem oria que cont em a instruc ao imediamente ap os a chamada da func ao O ponteiro do registro da func ao que fez a chamada aponta para o elemento antecessor da pilha de execuc ao

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

O endere co de retorno aponta para o enderec o de mem oria que cont em a instruc ao imediamente ap os a chamada da func ao O ponteiro do registro da func ao que fez a chamada aponta para o elemento antecessor da pilha de execuc ao Como o tamanho dos registros podem variar, o valor de retorno ca imediamente acima do registro da func ao que fez a chamada

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

A criac ao de registros de ativa c ao a cada chamada de func ao permitem a implementac ao da recurs ao

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

A criac ao de registros de ativa c ao a cada chamada de func ao permitem a implementac ao da recurs ao De fato, a recurs ao consiste em chamar uma func ao que tem o mesmo nome da func ao que fez a chamada

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Recurs ao Chamadas Recursivas

Chamadas de fun c oes

Notas sobre os registros de ativac ao

EDA Edson Recurs ao


Deni ca o

A criac ao de registros de ativa c ao a cada chamada de func ao permitem a implementac ao da recurs ao De fato, a recurs ao consiste em chamar uma func ao que tem o mesmo nome da func ao que fez a chamada A func ao n ao chama a si mesma, mas a uma nova inst ancia que tem a mesma estrutura da func ao original

Exemplos de recurs ao

Chamadas Recursivas
Chamadas de fun co es

Edson

EDA

Você também pode gostar