A utilização de recursividade não apenas diminui a quantidade de código a ser usada em um procedimento ou chamada, mas possibilita uma economia de tempo nas codificações como, por exemplo, calculando o fatorial de um número. “Um método recursivo pode chamar outro método, que por sua vez pode fazer uma chamada de volta ao método recursivo. Isso é conhecido como uma chamada recursiva indireta ou recursão indireta. Por exemplo, o método A chama o método B, que faz uma chamada de volta ao método A. Isso ainda é recursão, porque a segunda chamada para o método A é feita enquanto a primeira está ativa – isto é, a primeira chamada ao método A ainda não concluiu sua execução (porque está esperando o método B voltar um resultado para ela) e não retornou ao chamador original do método A” (DEITEL; DEITEL, 2016, p. 609).
DEITEL, P.; DEITEL, H. Java: como programar. 10. ed. São Paulo: Pearson Education do Brasil, 2016.
Observe o trecho de código a seguir, realizado na linguagem Java, versão 8.
Sobre o código anterior, avalie as afirmativas a seguir.
I. A codificação mostrada possui erro sintático, pois, nessa chamada recursiva, o método Fibonacci está chamando outro método para cálculo de mesmo nome, retornando uma chamada também com o mesmo nome de método.
II. A condição “number.equals(BigInteger.ZERO)” permite que todo trecho de código não necessite ser executado, uma vez que a estrutura “if…else” está limitando a execução caso o “if” inicial seja verdadeiro.
III. É possível realizar operações matemáticas por meio de métodos com cálculos predefinidos, seja para comparação, subtração ou adição numérica, passando como parâmetro o valor desejado.
Está correto o que se afirma em:
a.
II e III, apenas.
b.
I, apenas.
c.
I e II, apenas.
d.
I e III, apenas.
e.
I, II e III, apenas.
Lista de comentários
Resposta: (A) II e III, apenas.
Explicação: conferido no ava
Resposta:
Alternativa A II e III apenas, Conferido no ava
Explicação:
a implementação correta seria conforme o exemplo abaixo , aplicado e testado no NetBeans:
import java.math.BigInteger;
public class FibonacciCalculator {
private static BigInteger fibonacci(BigInteger number){
if (number.equals(BigInteger.ZERO) ||
number.equals(BigInteger.ONE)) // Casos Básicos
return number;
else // passo de recursão
return fibonacci(number.subtract(BigInteger.ONE))).add((fibonacci)(number.subtract(TWO)));
}
public static void main(String[] Args){
for (int counter =0; counter <= 20; counter ++ )
System.out.printf("Fibonacci of %d is: %d%n", counter,fibonacci(BigInteger.valueOf(counter)));
}
} // Fim da classe Fibonacci Calculator
copie e cole na sua IDE e execute para entender melhor o funcionamento e também o exercício