n=1while(n<3){//testaden<3<==>1<3fazn=n+1;// <==> n = 1 + 1 <==> n = 2n=n+executa(n+1);// <==> n = 2 + executa(2+1) <==> n = 2 + executa(3)// aqui é chamado novamente o método executa//n=3//nãopassadentrodowhilepois3nãoémenorque3eretornaovalordenqueé3.
while(n<3){//testaden<3<==>3<3nãofazowhile///...
}
returnn; // retorna 3//Voltandoparaprimeirachamadadométodon=2+executa(3)//n=2+3<==>n=5
Não sei se fui bem claro. Espero que ajude
Dragoon1 like
É 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:
newCalculadora().executa(1)publicintexecuta(intn){//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 . }returnn;}