17
Recursividade Prof. Alex F. V. Machado [email protected]

Recursividade Prof. Alex F. V. Machado [email protected]

Embed Size (px)

Citation preview

Page 1: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Recursividade

Prof. Alex F. V. [email protected]

Page 2: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Recursão

É o equivalente em programação da indução matemática que é uma maneira de definir algo em

termos de si mesmo.

Page 3: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Conceito de Recursividade

• Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente

• Conceito poderoso– Define conjuntos infinitos com comandos finitos

• Vantagens– Redução do tamanho do código fonte– Permite descrever algoritmos de forma mais clara e

concisa

• Desvantagens– Redução do desempenho de execução devido ao tempo

para gerenciamento de chamadas– Dificuldades na depuração de programas recursivos,

especialmente se a recursão for muito profunda

Page 4: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Implementação da Recursividade

• Usa-se uma pilha para armazenar os dados usados em cada chamada de um procedimento / função que não terminou

• Todos os dados não globais são armazenados na pilha, informando o resultado corrente

• Quando uma ativação anterior prossegue, os dados da pilha são recuperados

Page 5: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Recursividade

• Existe a recursão direta – quando uma função chama a si mesma diretamente.

• E a recursão indireta – quando uma função chama outra, e esta, por sua vez chama a primeira.

Page 6: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Recursividade

• Uma função pode ser implementada de forma interativa ou recursiva.– quase sempre a forma recursiva apresenta uma

codificação mais simples (reduzida).– Por outro lado, implementações interativas tendem a ser

mais eficientes (performance) que as recursivas.

Page 7: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como
Page 8: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Funções Recursivas contemduas partes principais

Ou....

Caso Base e Caso Recursivo

Page 9: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

1

2

3

4

Page 10: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Tipos de Recursão

- Recursão Linear

- Recursão Binária

- Recursão com Múltiplas Chamadas

Page 11: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 1:

Fatorial

/* calculo do fatorial – função recursiva */

int fat(int n)

{

if (n==1){

return 1;

}else{

return n*fat(n-1);

}

}

Page 12: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 2:

Fibonacci

/* calculo do valor fibonacci – função recursiva */

int fibonacci(int t){

if (t==1 || t==2) {

return 1;

}else{

return fibonacci (t-1)+fibonacci (t-2);

}

}

Page 13: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 3:

Algoritmo de Preenchimento

- Algoritmo recursivo- Preenche vizinhos da semente que atendem ao critério

- Aplica o algoritmo recursivamente tomando esses vizinhos como sementes

- Termina quando nenhum vizinho atende o critério

Page 14: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 3:

Algoritmo de Preenchimento

/*considerar pixel[] sendo uma matriz global */void FloodFill (int x, int y, int cor, int novaCor) {

If (pixel [x, y] == cor) {

pixel [x, y] = novaCor;

FloodFill (x + 1, y, cor , novaCor);

FloodFill (x, y + 1, cor , novaCor);

FloodFill (x - 1, y, cor , novaCor);

FloodFill (x, y - 1, cor , novaCor);

}

}

Page 15: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exercícios:

1. Crie uma função recursiva que calcule a exponenciação de um valor b por um expoente p sem usar o operador de exponenciação.

2. Escreva uma função recursiva que escreva na tela todos os números inteiros positivos desde um valor K informado pelo usuário até 0.

3. Escreva um algoritmo recursivo que escreva na tela a soma de todos os números inteiros positivos de K até 0.

4. Escreva uma função recursiva que calcule a soma de todos os números compreendidos entre os valores A e B passados por parâmetro.

5. Escreva uma função recursiva que calcule os juros compostos de um valor. Para isso o programa deverá ler um valor inicial, o número de meses e a taxa de juros ao mês, e passar estes valores à função como parâmetros.

6. Escreva uma função que faça a procura sequencial de um valor passado por parâmetro num vetor também passado por parâmetro.

Page 16: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 4:

Potência

/*calculo da potencia – função recursiva */

double potencia (float b, int p) {

if (p==0) return 1;

else

return b*potencia(b, p-1);

}

Page 17: Recursividade Prof. Alex F. V. Machado alexcataguases@hotmail.como

Exemplo 5:

Busca Bináriaint busca (int chave, int inicio, int final, int v[]){

int meio;

if (inicio >= final){ // se ini == fim

return v[final];

}

else {

meio = (inicio + final)/2;

if(v[meio] == chave) return v[meio];

if (v[meio] < chave)

return busca (chave, meio + 1, final, v);

else

return busca (chave, inicio, meio - 1, v);

}

}