Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como é que saiu esse resultado?!

Boa madrugada! Eu estou fazendo a trilha, formação Java da Alura e estou com uma dúvida que julgo ridícula para quem está estudando as bibliotecas Java, mais especificamente a Java.io, digo ridícula pois acredito que após passar pelos cursos anteriores, tal dúvida não deveria existir. Estava nesta madrugada olhando algumas questões de concurso, e me deparei com o código abaixo que na minha mente "rsrs", deveria retornar 20 porém o resultado é 120, alguns dos colegas poreriam me dizer aonde errei ao interpretar o mesmo?

public class Testt {

    public static int t001(int n){
        if (n==0) 
            return 1;
        return n*t001(n-1);
    }

    public static void main(String[] args) {
         System.out.println(t001(5));
    }

}
4 respostas

Boa noite Dayvit, seu código é um modelo matemático de Fibonacci, e o resultado aplicado para o número 5 é igual a 120 mesmo e não 20.

Segue exemplo: 54*32*1 = 120

Espero ter ajudado!

O código faz uma recursão de n-1, até n deixar de ser indefinido e ser 0, retornando 1.

solução!

Esse código com que tu te deparaste é uma implementação recursiva da função fatorial. Na matemática, definimos fatorial como:

fat 0 = 1

fat x = x * fat (x - 1)

Tem-se, portanto, que o domínio da função são os Naturais. Logo, x = 0 é o caso base, também chamado ponto de fuga, ou seja, o ponto em que a cascata recursiva é quebrada.

Uma forma mais elegante, porém igualmente ineficiente, para o problema seria:

public static int fat(int n) {
    return n == 0 ? 1 : n * fat(n - 1);
}

Pense no problema dessa forma:

fat 0 = 1

fat 1 = 1 * fat 0 = 1

fat 2 = 2 * fat 1 = 2

fat 3 = 3 * fat 2 = 6

fat 4 = 4 * fat 3 = 24

fat 5 = 5 * fat 4 = 120

...

Para entender completamente esse tipo de construção, seria interessante entender o funcionamento de estruturas e funções recursivas. Um conceito fundamental dentro da Ciência da Computação.

Recomendo a leitura dessa página: https://panda.ime.usp.br/pensepy/static/pensepy/12-Recursao/recursionsimple-ptbr.html

Resposta sensacional! Obrigado!