SóProvas


ID
1639714
Banca
CESPE / CEBRASPE
Órgão
DPF
Ano
2013
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

No que se refere às linguagens de programação, julgue o item subsecutivo.

A execução da função x descrita abaixo para o valor n igual a 8 fornecerá 21 como resultado.


long x(int n){

if (n<0) return -1;

if (n==0) return 0;

if (n==1) return 1;

return x(n-1) + x(n-2);

}

Alternativas
Comentários
  • f(8) = f(7) + f(6)

    f(6) = f(5) + f(4)

    f(4) = f(3) + f(2)

    f(2) = f(1) + f(0) = 1 + 0 = 1

    f(3) = f(2) + f(1) = 1 +1 = 2

    f(4) = f(3) + f(2) = 2+ 1 = 3

    f(5) = 3+2 = 5

    f(6) = 5+3 = 8

    f(7) = 8+5 = 13

    f(8) = 13 +8 = 21

    gabarito certo.

  • x(1) =  1
    x(2) =  1 + 0 = 1
    x(3) =  1 + 1 = 2
    x(4) =  2 + 1 = 3
    x(5) =  3 + 2 = 5
    x(6) =  5 + 3 = 8
    x(7) =  8 + 5 = 13
    x(8) = 13 + 8 = 21

  • Prezados,

    Se a função for executada passando o valor de n = 8, nenhum dos 3 primeiros ifs será acionado pois as condições serão sempre falsas , e o retorno será dado por :

    return x(n-1) + x(n-2)
    Vemos que ele entrará em uma recursão .

    Não precisamos executar todos os passos , basta entender que essa recursão retornará um valor quando n for menor que zero, zero ou 1, então, para resolver a questão de forma simples , ao invés de executar a recursão de 8 a 0 , vou executar de 0 a 8 até entender todos os retornos.

    long(0) retornará 0
    long(1) retornará 1
    long(2) retornará long(1) + long(0), ou seja , retornará 1
    long(3) retornará long(2) + long(1), ou seja, retornará 2
    long(4) retornará long(3) + long(2), ou seja, retornará 3
    long(5) retornará long(4) + long(3), ou seja, retornará 5
    long(6) retornará long(5) + long(4), ou seja, retornará 8
    long(7) retornará long(6) + long(5), ou seja, retornará 13
    long(8) retornará long(7) + long(6), ou seja, retornará 21

    Portanto a questão está correta.

  • Gab. C

     

    x(0)= 0
    x(1)= 1
    x(2)= x(1) + x(0) = 0+1 = 1
    x(3)= x(2) + x(1) = 1+1 = 2
    x(4)= x(3) + x(2) = 2+1 = 3
    x(5)= x(4) + x(3) = 3+2 = 5
    x(6)= x(5) + x(4) = 5+3 = 8
    x(7)= x(6) + x(5) = 8+5 = 13
    x(8)= x(7) + x(6) = 13+8 = 21

     

     

    FONTE: PCF - Rafael Nogueira

  • Recursão em programação é a técnica de chamar uma função dentro dela mesma. No caso a função x retorna um valor do tipo long (número) e recebe como parametro uma variavel do tipo int de nome [n].

    Dentro da função a varíavel [n] é avaliada por estruturas IF (SE) e caso verdadeira a checagem, retorna um valor. Caso todas as checagens sejam falsas se chama novamente 2 vezes ao final da função.

    Podemos perceber que a cada iteração o valor passado por parametro [n] é subtraído, desta forma eventualmente a função irá passar 1 e 0 como parametro, retornando 1 e 0 respectivamente.

    Uma função recursiva sempre deve ter uma regra de parada, do contrário entraria em um loop infinito até que consumisse toda a memória e travasse. Veja que a função somente se chama novamente caso [n] for maior que 1, do contrário somente retorna um valor parando a recursão e voltando como um bumerangue de volta a primeira iteração retornando os valores para finalizar o cálculo.

    Espero ter ajudado a ilustrar melhor como funciona uma função recursiva.

    Bons estudos pessoal!

  • Fibonacci: cada termo é igual a soma dos dois anteriores.

    se começar a fazer os resultados menores perceberá isso:

    n: 1 2 3 4 5 6 7 8

    resultado: 1 1 2 3 5 8 13 21

    Pelo programa sabemos que: x(4) = x(3) + x(2);

    corresponde justamente a soma dos últimos 2 elementos da sequencia.

    Observe que o programa se assegura que os dois primeiros termos da sequencia serão 1 e 1, com os dois últimos 'if's, sendo o primeiro if só será alcançado caso o usuário informe um n de valor negativo, o que seria um erro na lógica, retornando -1 como padrão para entrada inválida.

  • Força Guerreiro!!!!!!