algoritmo recursivo
TRANSCRIPT
Algoritmo Recursivo
Professor: Daniel LobãoEstagiário: Carlos Rodrigo
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;
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
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
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.
Definição pelo dicionário
RECURSIVIDADE Qualidade do que é recursivo.
RECURSIVO Relativo a recursividade.
Objetivos da Função Recursiva
Ter uma condição de Parada;Tornar o problema mais
Simples;
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
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
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;
Fatorial
https://olamundo0.files.wordpress.com/2010/04/fatorial.jpg
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
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
Atividade Prática
Criar um algoritmo recursivo que digite um numero e faça a soma dos números anteriores.
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)
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
Algoritmos Recursivos x IterativosTodo algoritmo recursivo
possui um algoritmo iterativo;
QUASE...
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.
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.
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
Fibonaccifuncao Recursivo(n : inteiro) : inteirovariniciocontadorRecursivo <- contadorRecursivo + 1se (n = 1) ou (n = 0) entao retorne n
senao retorne (Recursivo(n - 2) + Recursivo(n - 1))fimsefimfuncao
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
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.