Questão nº 53
Questão de Suporte · FGV DPGE-RJ 2014 (nº 53)
FGV2014Técnico Superior Especializado em SuporteSuporte
Gabarito: Cver comentário ↓
Seja a função recursiva f definida como
```
f(a,b)
se b = 0 então
retorna a
senão
retorna f(b, a MOD b)
```
onde x MOD y é o resto da divisão de x por y. O valor de f (30, 21) é
- A0
- B1
- C3 (alternativa correta)
- D7
- E9
Resposta comentada
Gabarito Alternativa C
A recursão é uma técnica onde uma função chama a si mesma para resolver um problema, dividindo-o em partes menores até chegar a um caso base que pode ser resolvido diretamente. A função apresentada implementa o Algoritmo de Euclides para encontrar o Máximo Divisor Comum (MDC) entre dois números.
- (A) Incorreta: O valor 0 seria retornado apenas se o primeiro argumento
afosse 0 no caso baseb = 0, o que não ocorre aqui, pois o MDC de números positivos é sempre positivo. - (B) Incorreta: 1 é um possível MDC, mas não é o MDC de 30 e 21, que possuem divisores comuns maiores.
- (C) Correta: A função calcula o MDC de 30 e 21.
f(30, 21):b(21) não é 0. Chamaf(21, 30 MOD 21).30 MOD 21 = 9. Então, chamaf(21, 9).f(21, 9):b(9) não é 0. Chamaf(9, 21 MOD 9).21 MOD 9 = 3. Então, chamaf(9, 3).f(9, 3):b(3) não é 0. Chamaf(3, 9 MOD 3).9 MOD 3 = 0. Então, chamaf(3, 0).f(3, 0):b(0) é 0. Retornaa, que é 3.
- (D) Incorreta: 7 é um divisor de 21, mas não de 30, portanto não pode ser o MDC.
- (E) Incorreta: 9 é o resto da primeira divisão (
30 MOD 21 = 9) e aparece como segundo argumento em uma chamada recursiva (f(21, 9)). A armadilha da banca aqui é confundir os valores intermediários ou restos das divisões com o resultado final do MDC.
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Suporte (Caderno Tipo 1). Reproduzida para fins de estudo.