SóProvas


ID
1119397
Banca
FGV
Órgão
DPE-RJ
Ano
2014
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

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) é :

Alternativas
Comentários
  • f(30,21) => f(21,9) => f(9,3) => f(3,0), se b = 0, retorna 3.

  • A função é recursiva pois fica chamando a si mesma, então devemos repeti - la até o b zerar e cair na primeira condição ,critério de parada, retornando o valor de a.

    f (30, 21) é:

    retorna f(21, 9(30 mod 21 = 1 resto 9))

    f(21, 9)

    retorna f(9, 3(21 mod 9 = 2 resto 3))

    f(9, 3)

    retorna f(3, 0(9 mod 3 = 3 resto 0))

    f(3, 0)

    Se b = 0 então retorna 3(valor de a)

    Resposta 3.

    Que Deus nos abençoe e nos proteja!

  • Força Guerreiro!!!!!!

  • Fala concurseiro (a), professor Martins na área...

    Essa questão é sobre recursividade, basta lembrar que uma função recursiva ela chama ela mesmo dentro de sua função. Vejamos o algoritmo da questão:

    f(a,b)

    se b = 0 então

    retorna a

    senão

    retorna f(b, a MOD b)

    Observe que na última linha é chamada a própria função para continuidade do algoritmo. A questão te dá os valores a=30 e b=21, agora basta executar o passo a passo do algoritmo. Vamos lá:

    1ª Rodada: f(30,21)

    21 = 0? -> Não, então vai para o senão

    Retorna a ser executado o algoritmo, os valores de a da função principal será b anterior e o valor de b será o resto da divisão de a por b (MOD), então para a função inicial os valores serão:

    b = 21,a MOD b=9 (30/21 possui resto 9) -> f(b, a MOD b)

    f(21,9)

    2ª Rodada: f(21,9) ->Observe os valores finais da primeira rodada

    9 = 0? -> Não, então vai para o senão

    Retorna a ser executado o algoritmo, os valores de a da função principal será b anterior e o valor de b será o resto da divisão de a por b (MOD), então para a função inicial os valores serão:

    b = 9, a MOD b=3 (21/9 possui resto 3) -> f(b, a MOD b)

    f(9,3)

    3º Rodada: f(9,3) ->Observe os valores finais da primeira rodada

    3 = 0? -> Não, então vai para o senão

    Retorna a ser executado o algoritmo, os valores de a da função principal será b anterior e o valor de b será o resto da divisão de a por b (MOD), então para a função inicial os valores serão:

    b = 3, a MOD b=0 (9/3 possui resto 0) -> f(b, a MOD b)

    f(3,0)

    4º Rodada: f(3,0) ->Observe os valores finais da primeira rodada

    0 = 0? -> Sim, então:

    Retorna a = 3

    Resposta então LETRA C

    Vamos juntos ser aprovados, guerreiros(as)!

    Me segue no insta para mais dicas @profmartinz