Baixe o app para aproveitar ainda mais
Prévia do material em texto
RECURSIVIDADE! 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. O procedimento "faz" é recursivo. Conforme o valor de N que for passado como parâmetro, ele chama a si próprio diversas vezes, sendo que, a cada chamada, é reduzido o valor de N. Quando N chega a zero, escreve o valor e começa a retornar das chamadas recursivas. Considere a implementação e o funcionamento de subprogramas (rotinas) recursivos. Analise as afirmativas a seguir e assinale a falsa. E. Subprogramas recursivos não precisam ter condição de parada. Todo subprograma recursivo precisa ter uma condição de parada, pois ficará autochamando-se infinitamente até ocorrer stack overflow. Analise as alternativas a seguir e selecione a que implementa corretamente um subprograma recursivo que calcula o somatório dos números inteiros no intervalo [1,N]. C. funcao Y(X :inteiro): inteiro inicio se X = 1 entao retorne (1) senao retorne(X + Y(X-1)) fimse fimfuncao A função Y recebe um valor inteiro; quando esse valor é 1, ela retorna 1, se não, ela retorna o valor de X + Y(X-1), calculando recursivamente o somatório. 4. Analise o seguinte subprograma em pseudocódigo: funcao M(X :inteiro): inteiro inicio se (X = 0) ou (X = 1) entao retorne (1) senao retorne(M(X-1)+M(X-2)) fimse fimfuncao As alternativas a seguir apresentam chamadas da função M e indicam o retorno conforme o valor passado como parâmetro. Selecione a alternativa correta. A. M(5) retornará o valor 8. M(7) = M(6) + M(5) = 21 M(6) = M(5) + M(4) = 13 M(5) = M(4) + M(3) = 8 M(4) = M(3) + M(2) = 5 M(3) = M(2) + M(1) = 3 M(2) = M(1) + M(0) = 2 M(1) = 1 M(0) = 1 Resposta correta. C. Série = (1/1) + (2/1) + (3/2) + (4/3) + (5/4) + (6/5) + (7/6) + (8/7) + (9/8) + (10/9). Essa alternativa representa a série calculada pela função calcula quando o conteúdo da variável valor for 10. Desafio A recursividade é um processo utilizado 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 tipo real, e que escreva todos os elementos do vetor. Para realizar essas tarefas, utilize 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) O algoritmo abaixo demonstra a implementação do desafio. algoritmo "VetorRecursivo" var valor : vetor[1..10] de real procedimento ler var K : inteiro inicio para K de 1 ate 10 passo 1 faca escreva("Digite elemento[",K,"]: ") leia(valor[K]) fimpara fimprocedimento procedimento escrever var K : inteiro inicio para K de 1 ate 10 passo 1 faca escreva("elemento[",K,"]: ",valor[K]) fimpara fimprocedimento funcao somatorio(X : inteiro):real inicio se (X = 1) entao retorne(valor[1]) senao retorne(valor[X]+somatorio(X-1)) fimse fimfuncao inicio ler() escrever() escreval("Somatorio: ",somatorio(10)) fimalgoritmo
Compartilhar