Acompanhamento de Código Recursivo

14 respostas
anderson.bonavides

Pessoal qual a saída desse código e porque do seu resultado?

N = 4

public class Main {
	public static void main(String[] args) {
		System.out.println(F(4));
	}
	
	public static int F(int n){
		int f;
		
		if(n == 1){
			return n * n;
		}else{
			f = F(n-1) * n;
		}
			
		return f;
		
	}
}

a) loop infinito.
b) 24
c)16
d)-24
e)-16

14 Respostas

TerraSkilll

Você rodou esse código? Fez a simulação na mão (teste de mesa)? Se não, o que está esperando? Se sim, que resultados obteve?

Compartilhe seus resultados, e te ajudaremos a elucidar suas dúvidas.

Abraço.

anderson.bonavides

TerraSkilll:
Você rodou esse código? Fez a simulação na mão (teste de mesa)? Se não, o que está esperando? Se sim, que resultados obteve?

Compartilhe seus resultados, e te ajudaremos a elucidar suas dúvidas.

Abraço.

Rapaz, claro que sim, mas tentei gerar uma discussão saudável sobre o assunto.

Rodrigo_Sasaki

Opção B?

TerraSkilll

Perguntei justamente porque não ficou claro. Do jeito que está, parece simplesmente que você quer a resposta, o que deixa o tópico com cara de “façam minha lição de casa”.

Abraço.

anderson.bonavides

Perguntei justamente porque não ficou claro. Do jeito que está, parece simplesmente que você quer a resposta, o que deixa o tópico com cara de “façam minha lição de casa”.

Abraço.

Cara de forma alguma, isso é uma questão de concurso e estou abrindo margem para discutir o assunto porque na minha opinião apesar de parecer fácil é uma questão bem interessante.

anderson.bonavides

Show Rodrigo, exatamente. Conseguiu resolver rápido ou demorou um pouco como eu até achar a resposta? rsrsr

Rodrigo_Sasaki

Eu não demorei, mas usei um bloco de notas pra me ajudar :slight_smile:

Ziguifrid

Eu rodei o teste e não entendi a lógica. Mudei para 3 o parâmetro. Para mostrar menos resultados.

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

    public static int F(int n){
        int f;
        System.out.println("n "+n);
        if(n == 1){
            //System.out.println("nope");
            return n * n;

        }else{
            System.out.println("fia ");
            f = F(n-1) * n;
            System.out.println("f maluco "+f);
        }
       // System.out.println("f "+f);
        System.out.println("********************************************************************");
        return f;

    }

Imprimiu

n 3
fia
n 2
fia
n 1
f maluco 2


f maluco 6


6

Por que o (f maluco) parece duas vezes?

Não deveria aparecer só o (f maluco 6)?

Rodrigo_Sasaki

não, o return está fora do bloco do if

anderson.bonavides

Isso vai te explicar bem o resultado:

F4 4x(F3) = 4x6 = 24

F3 3xF2 = 3x2 = 6

F2 2xF1= 2x1 = 2

F1 1x1=1

G

de cabeça assim, parece q tem q dar 24.

só não entendi o q tem d+ nesse código

anderson.bonavides

GilsonNunes:
de cabeça assim, parece q tem q dar 24.

só não entendi o q tem d+ nesse código

Eu achei uma boa questão pelo fato de te enganar ao achar que vai dar loop infinito. Acho que muita gente o qual fez esta prova no dia do concurso marcou a letra A.

regis_hideki

Dá para saber fácil que não dá loop infinito para N >= 1, pois o else sempre passa o n "decrementado".

Ataxexe

Perguntei justamente porque não ficou claro. Do jeito que está, parece simplesmente que você quer a resposta, o que deixa o tópico com cara de “façam minha lição de casa”.

Abraço.

Cara de forma alguma, isso é uma questão de concurso e estou abrindo margem para discutir o assunto porque na minha opinião apesar de parecer fácil é uma questão bem interessante.

E por quê não disse isso na primeira mensagem e evitou a dupla interpretação? Não custa nada dizer o motivo pelo qual você abriu o tópico em vez de esperar que todo mundo adivinhe o que você pensou. Nem a prova do concurso de onde saiu essa questão você foi capaz de dizer, então, não espere milagres de um grupo de usuários calejados de tanto dar fora em quem quer lição de casa pronta.

Bom, respondendo ao já clareado tópico, a questão é muito simples e eu, realmente, não vi nada de interessante pois é somente uma forma de calcular o fatorial (apesar de dar loop infinito caso n seja 0).

Criado 9 de dezembro de 2014
Ultima resposta 3 de jan. de 2015
Respostas 14
Participantes 7