Em relação aos conceitos de programação orientada a objetos ...

Próximas questões
Com base no mesmo assunto
Q351962 Algoritmos e Estrutura de Dados
Em relação aos conceitos de programação orientada a objetos e lógica de programação, julgue os itens subsequentes.

O resultado abaixo será obtido ao se executar o algoritmo que a ele se segue.

Resultado:

1 0;
0 0;
2 1;
1 0;
3 2;
2 2;

Algoritmo:

program p;
var v: inteiro;
funcao f(v: inteiro; var k:inteiro): inteiro;
var p,q:inteiro;
inicio
se v < 2
então inicio
f := v;
k := 0;
fim
senão inicio
f := f(v-1, p) + f(v-2, q);
k := p + q + 1;
fim;
escreva(n,' ',k,'; ');
fim ;
inicio
n := 4;
escreva(f(3,n),n);
fim

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito Comentado: Alternativa E - Errado

Vamos analisar a questão com cuidado. Este problema exige conhecimento de algoritmos recursivos e compreensão sobre funções e variáveis em um contexto de programação.

Primeiro, precisamos entender o que o algoritmo faz:

A função f é uma função recursiva que recebe dois parâmetros: v (inteiro) e k (inteiro passado por referência). Ela também utiliza duas variáveis locais, p e q.

Agora, vamos decompor este algoritmo recursivo:

1. Se v é menor que 2, f retorna v e define k como 0.

2. Se v é 2 ou maior, ele chama a si mesmo duas vezes: f(v-1, p) e f(v-2, q), e então retorna f(v-1, p) + f(v-2, q), definindo k como p + q + 1.

Vamos seguir a execução do algoritmo com n = 4 e calcular f(3, n).

1. f(3, n):

- Chama f(2, p) e f(1, q)

- f(2, p):

- Chama f(1, p) e f(0, q)

- f(1, p) retorna 1 e define p como 0

- f(0, q) retorna 0 e define q como 0

- f(2, p) retorna 1 e define p como 1 (p = 0 + 0 + 1)

- f(1, q) retorna 1 e define q como 0

- f(3, n) retorna 2 e define n como 2 (n = 1 + 0 + 1)

Portanto, os valores intermediários são:

- f(0, 0) = 0, k = 0

- f(1, 0) = 1, k = 0

- f(2, 1) = 1, k = 1

- f(1, 0) = 1, k = 0

- f(3, 2) = 2, k = 2

O resultado final que deve ser impresso é: 2 2

No entanto, considerando o enunciado da questão, o resultado esperado é diferente. Segundo o enunciado, o resultado seria:

1 0; 0 0; 2 1; 1 0; 3 2; 2 2;

Isso indica que a descrição da função talvez esteja errada ou que há um erro de transcrição no enunciado. A alternativa correta é E - Errado porque a execução do algoritmo não corresponde ao resultado fornecido no enunciado.

Espero que essa explicação tenha ajudado a entender melhor o funcionamento da recursão e a análise detalhada do algoritmo. Se tiver mais dúvidas, estarei à disposição para ajudar!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Eu marquei errado. Acertei na intuição, tentei fazer o caminho do algoritmo na mão. Mas não consegui entender direito algumas partes. Acredito que esteja me confundindo na ideia de passagem de parâmetros por valor e por referência. Alguém posta o resultado correto?

 

=)

Marquei errado logo de cara quando vi a linha "se v < 2", sendo q v é null.... daria exceção... ao meu entender.. será que estou certo?

f(v,k) -> é chamada em escreva (f(3,n),n) -> f(3,n) ou Seja, o valor de v = 3 e k = n.

Marquei errado, pois não aparece no algoritmo a declaração da variável "n" o que da erro de sintaxe.

marquei errado, pois pelo que entendi não existe atribuição de valor à variável p e a variável q para poder verificar a função. 

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo