Porque esse código da o valor de 5 no final de sua execução?

3 respostas
javacodestatic
C

Alguem pode me explicar passo o porque desse programa dar o valor 5.

public class Calculadora{

	public static void main(String[] args) {
		System.out.println(new Calculadora().executa(1));
	}
	
	public int executa(int n){
		while (n < 3){
			n += 1;
			n += executa (n + 1);
		}
		return n;
	}
}

3 Respostas

M

os passos dentro do while é o seguinte

n = 1
while(n<3){ // testa de n < 3 <==> 1 < 3 faz
n = n + 1;// <==> n = 1 + 1 <==> n = 2
n = n + executa(n+1);// <==> n = 2 + executa(2+1) <==> n = 2 + executa(3)// aqui é chamado novamente o método executa
  //  n = 3
//não passa dentro do while pois 3 não é menor que 3 e retorna o valor de n que é 3.
 while(n<3){ // testa de n < 3 <==> 3 < 3 não faz o while
///...
    }
return n; // retorna 3

//Voltando para primeira chamada do método
n = 2 + executa(3) // n = 2 + 3 <==> n = 5

Não sei se fui bem claro. Espero que ajude

Dragoon

É uma cilada !!!

Nesse while por consequência só rodará uma unica vez porque, ao subir para próxima interação não passa na decisão.

Você começou com o número 1

While ( n < 3 ) é verdade, porque 1 < 3


n +=1 é a sobrecarga de operador, onde n = n + 1 que no final de execução dessa linha ficará 2


n += executa(n + 1) que é n = 2 + execute(2+1), chamando assim o método execute com o valor 3 dentro dessa execução ele vai retornar o valor 3 porque ele nem entre nesse while pela condição 3<3 e o n no fim de execução dessa linha ficará 5.


Por fim quando voltar na interação do while 5 < 3 vai dar false ele vai sair do while e retornará 5

Nesse link tem um exemplo que quando ele passa em cada linha:

DEMO

R

Vou tentar ser mas claro possível

new Calculadora().executa(1)


public int executa(int n){ //Valor de N = 1 
    while (n < 3){  // N < 3 = 1 < 3 
	n += 1;  // n+= 1  = 1 +1 (n + soma o valor de N = 2)
	n += executa (n + 1); //Aqui que você deve esta se embaralhando n + 1 = 2 + 1 = 3
        //então se n < 3 não ele e igual então o retorno e 3 e so somar 3 + 2 = 5 . 
    }
    return n;
}
Criado 4 de julho de 2016
Ultima resposta 4 de jul. de 2016
Respostas 3
Participantes 4