algoritmo recursivo

24
Algoritmo Recursivo Professor: Daniel Lobão Estagiário: Carlos Rodrigo

Upload: carlos-rodrigo-de-araujo

Post on 10-Feb-2017

361 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Algoritmo recursivo

Algoritmo Recursivo

Professor: Daniel LobãoEstagiário: Carlos Rodrigo

Page 2: Algoritmo recursivo

Roteiro

Retomar conteúdo anterior;Conceito de Recursão;Objetivos da Função Recursiva;Ligação com a Matemática;Algoritmo Recursivo;Como fazer um Algoritmo Recursivo;

Page 3: Algoritmo recursivo

Função e Procedimentofuncao <nome-de-função> [(<seqüência-de-declarações-de-parâmetros>)]: <tipo-de-dado>// Seção de Declarações Internasinicio//precisa de um retorno// Seção de Comandosfimfuncao

Page 4: Algoritmo recursivo

Função e Procedimentoprocedimento <nome-de-procedimento> [(<seqüência-de-declarações-de-parâmetros>)]// Seção de Declarações Internasinicio// Seção de Comandosfimprocedimento

Page 5: Algoritmo recursivo

O que é Recursão?É um método de programação no qual

uma função pode chamar a si mesma. O termo é usado de maneira mais geral para descrever o processo de repetição de um objeto de um jeito similar ao que já fora mostrado.

Page 6: Algoritmo recursivo

Definição pelo dicionário

RECURSIVIDADE Qualidade do que é recursivo.

RECURSIVO Relativo a recursividade.

Page 7: Algoritmo recursivo

Objetivos da Função Recursiva

Ter uma condição de Parada;Tornar o problema mais

Simples;

Page 8: Algoritmo recursivo

Caso não tenha esses Objetivos?Sem condição de Parada

Com Procedimento

enquanto (VERDADEIRO) faca escreval("INFINITO")fimenquanto

procedimento escrever(quantidade:inteiro; texto:caractere)varinicioescreval(texto) escrever(quantidade - 1, texto)fimprocedimento

Page 9: Algoritmo recursivo

Solução

algoritmo “teste"

procedimento escrever(quantidade:inteiro; texto:caractere)variniciose (quantidade <> 0) entao escreval(texto) escrever(quantidade - 1, texto)fimsefimprocedimento

Var

Inicio

// Seção de Comandos

escrever(5, "Olá")Fimalgoritmo

Page 10: Algoritmo recursivo

FatorialRepresentação n!; n pertence ao conj. dos

naturais;n=0 0!=1;n=5 5! = 5 x 4 x 3 x 2 x 1 =

120;

Page 11: Algoritmo recursivo

Fatorial

https://olamundo0.files.wordpress.com/2010/04/fatorial.jpg

Page 12: Algoritmo recursivo

No VisualG como seria a Função?funcao fat (n:Inteiro):Inteiro

var i, resultado : inteiroinicio resultado <- 1 para i de n ate 1 passo -1 faca resultado <- resultado * i fimpara retorne resultadofimfuncao

Page 13: Algoritmo recursivo

No VisualG: Fatorial Recursivo

funcao fat (n:Inteiro):Inteiroinicio se n=0 entao retorne 1 senao retorne n * fat (n-1) fimsefimfuncao

Inicio

escreva("Digite um número: ") leia (numero) escreval("O fatorial de ", numero, " é ", fat(numero))

fimalgoritmo

Page 14: Algoritmo recursivo

Atividade Prática

Criar um algoritmo recursivo que digite um numero e faça a soma dos números anteriores.

Page 15: Algoritmo recursivo

Resposta sem Recursividadevarn, cont, soma, i: inteiroinicioescreval("Informe um número inteiro:")  leia(n)se n <= 0 entaorepita

senaocont <- 0soma <- 0

para i de 1 ate n faca

  soma <- soma + cont  cont <- cont + 1

  fimpara

  fimse

escreval ("Soma:", soma)

Page 16: Algoritmo recursivo

Somatório Recursivofuncao somatorio (n:Inteiro):Inteiroinicio se n=1 entao retorne 1 senao retorne n + somatorio (n-1) fimsefimfuncao

Inicio escreva("Digite um número: ") leia (numero) escreval("O Somatório de ", numero, " é ", somatorio(numero))

fimalgoritmo

Page 17: Algoritmo recursivo

Algoritmos Recursivos x IterativosTodo algoritmo recursivo

possui um algoritmo iterativo;

QUASE...

Page 18: Algoritmo recursivo

Vantagens Simplifica a solução de alguns

problemasRecursividades são mais compactas

para alguns tipos de algoritmo, mais legíveis e mais fáceis de ser compreendidas e implementadas.

Page 19: Algoritmo recursivo

DesvantagensPor usarem intensivamente a memória ou poder de

processamento, os algoritmos recursivos tendem a ser mais lentos e a consumir mais memória que os iterativos, porém pode valer a pena sacrificar a eficiência em benefício da clareza.

Erros de implementação podem levar a estouro de pilha. Isto é, caso não seja indicada uma condição de parada, ou se esta condição nunca for satisfeita, entre outros.

Page 21: Algoritmo recursivo

Fibonaccifuncao Iterativo(n : inteiro) : inteirovarfib, n1, n2, indice: inteiroiniciose (n = 0) ou (n = 1) entao retorne nsenao n1 <- 0 n2 <- 1

para indice de 2 ate n passo 1 faca fib <- n2+n1 n1 <- n2 n2 <- fib fimpara retorne fibfimsefimfuncao

Page 22: Algoritmo recursivo

Fibonaccifuncao Recursivo(n : inteiro) : inteirovariniciocontadorRecursivo <- contadorRecursivo + 1se (n = 1) ou (n = 0) entao retorne n

senao retorne (Recursivo(n - 2) + Recursivo(n - 1))fimsefimfuncao

Page 23: Algoritmo recursivo

Fibonaccifuncao RecursivoMemorizado(n : inteiro) : inteirovariniciocontadorRecursivoMemorizado <- contadorRecursivoMemorizado + 1se (n = 0) ou (n = 1) ou (memorizado[n] <> 0) entao retorne memorizado[n]

senao memorizado[n] <- (RecursivoMemorizado(n - 2) + RecursivoMemorizado(n - 1)) retorne memorizado[n]fimsefimfuncao

Page 24: Algoritmo recursivo

Referências

MEDINA, Marco; FERTIG, Cristina. Algoritmos e Programação - Teoria e Prática. 2ª Edição. Editora Novatec, 2006.

MAGALHÃES, Regis Pires. Lógica Algoritmo - Recursividade. 2009. Disponível em: <http://pt.slideshare.net/regispires/logica-algoritmo-08-recursividade-presentation>. Acesso em: 06 mar. 2015.

RECURSIVIDADE. Disponível em: <http://www.di.ufpe.br/~if096/recursao/sld001.htm>. Acesso em: 06 mar. 2015.