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

Alguem pode me explicar como isso funciona?? pq ele retorna o fatorial??

class Prova {
    public static void main(String[] args) {
        System.out.print ("O resultado da operação é " + calcular(5));
    }

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

Olá Francisco,

Bom, a função calcular(int n) é uma função recursiva, ou seja, ela fica chamando ela mesma enquanto a condição dentro dela for verdadeira.

Neste caso, que calcula o fatorial, a função primeiramente é chamada recebendo 5, só que no retorno da função é o resultado do calculo de 5 vezes o calculo fatorial de 4, ou seja, ela vai se repetir até que chegue em fatorial de 0 que retorna 1.

Depois deste ponto, a linguagem cuida de fazer o caminho contrário, multiplicando fatorial de 0 (que é 1) vezes o fatorial de 1, vezes o de 2... até que chegue em 5, e finalmente retorna para o println.

Espero que tenha solucionado sua dúvida,

Abs.

Fala Luan, Blz?

Certo, mas onde está a subtraçao ??

tipo... entendi que o 5 é dado como parametro na funcao... dai nao entra no if...pq é != de 0 mas dai ficaria 5 * (5-1); que daria 20 correto? só que esse (5-1) virou um 4! isso que eu nao entendi....

Na verdade Francisco, não dá 20, pois não é 5 * (5-4).

Observe que no return, a função fica n (que é 5) * calcula(4), só que o computador ainda precisa saber o valor de calcula(4), aí chama novamente a função, em outro espaço na memória, mandando desta vez o valor 4 no lugar de n, sendo calcula(4) = 4 * calcula (3). E esse processo se repete até o fatorial de 0, que a função entra no if e apenas retorna 1, importante observar que ela não chama ela mesma outra vez neste ponto, já que a função termina no return 1. Depois desde ponto que ele começa a fazer a multiplicação, 0! (que é 1) * 1!(que também é 1) * 2! (que é 2) * 3!(que é 6)...

No return do calcula(5), substituindo os valores fica 5 * 4!, como você comentou no final.

Hmmm acho que estou começando a entender... mas assim: primeiro "loop" 5calcula(5-1) segundo 4calcula(4-1) terceiro 3calcula(3-1) quarto 2calcula(2-1) quinto 1calcula(1-1) = 1calcula(0) = 1*1= 1 e dai em diante o que ocorre??? quero dizer... como é feita essa multiplicaçao? e pq?? kkk

tem alguma parte do curso em Java que abrange isso detalhadamente?? desde já agradeço!

solução!

Francisco,

Você escreveu exatamente o que o computador faz, só substituir os valores. É importante pensar que cada vez que a função calcula() é escrita ela irá retornar um valor.

No curso de Java eu creio que não, pois este assunto é abordado detalhadamente no curso de Lógica de Programação, dá uma olhada neles =)

Abs.