Recursividade

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 22

22/04/2020 https://sagahcm.sagah.com.

br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

RECURSIVIDADE


Olá!
APRESENTAÇÃO

Nesta Unidade de Aprendizagem, trabalharemos com recursividade através da construção


de subalgoritmos recursivos.

Bons estudos.

Ao nal desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:


Iden ficar as caracterís cas de funções recursivas.

Reconhecer problemas que podem ser resolvidos através de soluções recursivas.

Construir algoritmos que u lizem recursividade.

 DESAFIO

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 1/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

A recursividade é um processo u lizado para definir a própria solução, sendo chamado


recursivamente na especificação de sua execução.

Seu desafio é construir um algoritmo em pseudocódigo que leia um vetor de 10 elementos,


sendo cada elemento do po real, e que escreva todos os elementos do vetor. Para realizar
essas tarefas, u lize dois procedimentos não recursivos (ler e escrever). O algoritmo
também deve ter uma função recursiva que calcule o somatório dos elementos do vetor;
assim, o somatório pode ser definido da seguinte maneira:

Somatorio(X)
se X = 1, o somatorio é o primeiro elemento do vetor (vetor[1])
se X > 1, o somatório é o elemento atual (vetor[X]) + Somatorio(X-1)

 INFOGRÁFICO

Subalgoritmos recursivos.

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 2/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

 CONTEÚDO DO LIVRO

A recursividade é uma forma de construir funções que apresentam chamadas a elas


mesmas recursivamente. Conheça um pouco mais sobre esse assunto estudando as páginas
selecionadas do seguinte livro: EDELWEISS, N.; LIVI, M.A.C. Algoritmos e programação com
exemplos em Pascal e C - Vol. 23. Série Livros Didá cos Informá ca UFRGS. Porto Alegre:
Bookman, 2014. Boa leitura!

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 3/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 4/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 5/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 6/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 7/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 8/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 9/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 10/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 11/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 12/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 13/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 14/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

 DICA DO PROFESSOR

Assis ndo ao vídeo preparado para esta Unidade, compreenderemos como funcionam os
subprogramas recursivos!

Conteúdo disponível na plataforma virtual de ensino. Con ra!

 EXERCÍCIOS

1) Considere o seguinte algoritmo em pseudocódigo e selecione a alterna va falsa.

algoritmo "oquefaz"
var
valor : inteiro
procedimento faz(N : inteiro)
inicio
se (N=0) entao
escreval(N)
senao
faz(N-1)
escreval(N)
fimse
fimprocedimento

inicio
repita
escreva("Digite: ")
leia(valor)
ate valor >= 0
faz(valor)
fimalgoritmo

a) O procedimento "faz" é recursivo.

b) O procedimento "faz" possui uma condição de parada da recursividade.

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 15/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

c) O algoritmo escreve os números inteiros entre 0 (zero) e o valor lido.

d) O procedimento "faz" escreve o valor de N quando esse é igual a zero ou escreve


o valor de N-1 quando N for maior que zero.

e) Se o valor digitado for menor que zero, o programa solicitará que seja digitado
um novo valor.

2) Considere a implementação e o funcionamento de subprogramas (ro nas) recursivos.


Analise as afirma vas a seguir e assinale a falsa.

a) Subprogramas recursivos possuem chamadas a si mesmos.

b) A execução do subprograma fica em espera (em suspenso) até que retorne da


chamada recursiva.

c) Cada chamada recursiva exige o armazenamento de nova posição de retorna e


criação de novas variáveis locais.

d) Ro nas recursivas correm o risco de gerar stack overflow.

e) Subprogramas recursivos não precisam ter condição de parada.

3) Analise as alterna vas a seguir e selecione a que implementa corretamente um


subprograma recursivo que calcula o somatório dos números inteiros no intervalo [1,N].

a) funcao Y(X :inteiro): inteiro


inicio
se X = 0 entao
retorne (1)
senao
retorne(X + Y(X-1))
fimse
fimfuncao

b) funcao Y(X :inteiro): inteiro

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 16/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

inicio
se X = 1 entao
retorne (1)
senao
retorne(X - Y(X-1))
fimse
fimfuncao

c) funcao Y(X :inteiro): inteiro


inicio
se X = 1 entao
retorne (1)
senao
retorne(X + Y(X-1))
fimse
fimfuncao

d) funcao Y(X :inteiro): inteiro


var
K, L : inteiro
inicio
K

e) funcao Y(X :inteiro): inteiro


var
K, L : inteiro
inicio
K

4) Analise o seguinte subprograma em pseudocódigo:

funcao M(X :inteiro): inteiro


inicio
se ((X = ou (X = ) entao
retorne (1)
senao

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 17/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

retorne(M(X-1)+M(X-2))
fimse
fimfuncao

A alterna vas a seguir apresentam chamadas da função M e indicam o retorno conforme


o valor passado como parâmetro. Selecione a alterna va verdadeira.

a) M(5) retornará o valor 5.

b) M(10) retornará o valor 34.

c) M(1) retornará o valor 0.

d) M(3) retornará o valor 3.

e) M(7) retornará o valor 8.

5) Analise o seguinte algoritmo em pseudocódigo:

algoritmo "oquefaz"
var
valor : inteiro
funcao calcula(N : inteiro):real
inicio
se (N= entao
retorne(1)
senao
retorne( (N / (N-1)) + calcula(N-1))
fimse
fimfuncao

inicio
escreva("Digite Valor: ")
leia(valor)
escreval("Serie= ",serie(valor))
fimalgoritmo

Considere que foi digitado 10 para a variável valor. Selecione a alterna va que representa
corretamente a série implementada pela função calcula(valor).

a) Série = (1/1) + (1/2) + (2/3) + (3/4) + (4/5) + (5/6) + (6/7) + (7/8) + (8/9) + (9/10).

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 18/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

b) Série = 1 + (1/1) + (2/1) + (3/2) + (4/3) + (5/4) + (6/5) + (7/6) + (8/7) + (9/8).

c) Série = (1/1) + (2/1) + (3/2) + (4/3) + (5/4) + (6/5) + (7/6) + (8/7) + (9/8) + (10/9).

d) Série = (1/1) - (1/2) + (2/3) - (3/4) + (4/5) - (5/6) + (6/7) - (7/8) + (8/9) - (9/10).

e) Série = (1/1) - (2/1) + (3/2) - (4/3) + (5/4) - (6/5) + (7/6) - (8/7) + (9/8) - (10/9).

 NA PRÁTICA

José trabalha como estagiário em uma fábrica de so ware, em meio de suas atribuições ele
se deparou com uma dúvida referente a recursividade em um dos projetos que lhe foi dado,
a dúvida dele foi:

"Uso recursão ou iteração (ouvi dizer que se pode fazer das duas formas) para resolver um
dado problema algorítmico?"

Sendo assim, procurou seu líder de equipe, que lhe explicou:

"José, acho que quase todos que desenvolvem programas usam métodos itera vos para a
criação de programas, vejo que você está ligado e foi ó mo a sua curiosidade. Vou dar uma
nova ferramenta para modificar um pouco seu código e explicar as diferenças."

Primeiro de tudo, o que é um método itera vo e o que é um método recursivo?

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 19/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

Vejamos duas funções que fazem exatamente a mesma coisa, o produto fatorial de um
número, entretanto uma usa um processo itera vo e a outra um processo recursivo.

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 20/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

//método itera vo
int fatorial(int x){
int i,result;
result=1;
for (i=0; i uso do comando for
result= result*(x-i);
}
return result;

}
//método recursivo
int fat(int x)
{
if (x < 2) return 1;>ecursivo uso de uma condição para o fim
else return fat(x-1) * x;
}

int main(int argc, char *argv[]) {


//chamadas dos métodos
prin ("Fatorial com iteração.: %d",fatorial(4));
prin ("nFatorial com recursão.: %d",fat(4));
return 0;
}

Note que no método itera vo é criado um loop (for), já o recursivo a função é chamada
dentro de si mesma com uma condição de parada.

O uso da linguagem C é para exemplificar, isso ajuda os programadores que querem


aprender, mas o importante é fazer outros experimentos para ver se realmente entendeu.

 SAIBA +

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 21/22
22/04/2020 https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860

Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do
professor:

Recursividade
Neste vídeo, o autor dá uma aula sobre recursividade u lizando slides e dando exemplos.
Conteúdo disponível na plataforma virtual de ensino. Con ra!

Me Salva! Programação em C - PLC20 - Recursão


No vídeo a seguir, a autora mostra como exemplo o fatorial de um número.
Conteúdo disponível na plataforma virtual de ensino. Con ra!

Curso de Programação em C/C++ - Aula 14 - Recursividade


Neste vídeo, o autor mostra, como exemplo, a impressão de números sequênciais de início
e limite de um número.
Conteúdo disponível na plataforma virtual de ensino. Con ra!

https://sagahcm.sagah.com.br/sagahcm/sagah_ua_dinamica/impressao_ua/16349860 22/22

Você também pode gostar