Cuando ejecuto esta función ingresando 2 y no entiendo por qué devuelve 83 y no 5, ya que debería llamar a la función (1) en la declaración else y luego la declaración if debería ejecutarse y la función debería devolver 5.
public static int function(int y) { if (y == 1) return 5; function(y - 1); y = y + 1; return 83; }Devuelve 83 porque no está utilizando el valor de retorno de la function(y - 1);
Para probarlo prueba:
public static int function(int y) { if (y == 1) return 5; else { int returnedValue = function(y - 1); System.out.println("un used returned value: "+returnedValue); y = y + 1; return 83; } }Cambiar a:
public static int function(int y) { if (y == 1) return 5; /*else*/ return function(y - 1); }Con entrada: y = 2,
otra condición será manejada.
function(y - 1);//nothing impact to y y = y + 1;// y =3 return 83; // but finally return 83¿Entiendes el punto?
Dado que no devuelve function(y-1) , la declaración es tan buena como anular la función (para esa llamada).
Entonces, tan pronto como el control alcanza la función (y-1) y finalmente conduce a la función de llamada (1), obtiene 5 pero no se devuelve a la función del controlador. En cambio, lo que se devuelve es el valor 83.
Mira esto:
public static int function(int y) { if (y == 1) return 5; function(y - 1); // you do not use return value y = y + 1; return 83; // you always get this return }Significa que puede reemplazar su función con:
public static int function(int y) { return 83; }Parece que quieres hacer algo. Me gusta esto:
public static int function(int y) { return y == 1 ? 5 : function(y - 1); } pero tenga cuidado, porque para y < 1 tendrá una recursividad infinita ( StackOverflowError ).