public static void foo(int n) {

    if(n > 0) {
        if(n % 2 == 0) {
            foo(n - 3); 
        } else {
            foo(n - 1); 
        }
    }

    System.out.println(n); 
}

No entiendo el método recursivo aquí. Veo cómo se imprimirá -1, pero no entiendo cómo se imprimirá "-1 2 3". Cualquier ayuda sería apreciada.

El método fue llamado por foo(3)

-1
79t97g 14 dic. 2016 a las 02:20

2 respuestas

La mejor respuesta

Este es el proceso ...

foo(3) --> foo(2)
//because  (3 % 2 != 0)

foo(2) --> foo(-1)
//because  (2 % 2 == 0)

foo(-1) --> print -1
//because (-1 < 0)  
//goes back & continue from last point where this method is called

print 2, then exit method
//goes back & continue from last point where this method is called

print 3, then exit method
//goes back & continue from last point where this method is called

back to main()

Lo hice, usé pythontutor.com para visualizarlo, pero no entiendo por qué después de que imprime -1, vuelve a la línea "n% 2"

Todavía continúa imprimiendo porque después de imprimir -1, aunque sale del método que imprime -1, pero regresa y continúa desde donde se llamó a foo (-1). Continúa desde allí ...

3
user3437460 13 dic. 2016 a las 23:37

El método recursivo funciona continuamente solicitando los mismos métodos. En su código cuando solicita foo (3);

Hora 1: 3%2=1 así que esto solicitará ELSE parte Entonces se llamará a foo (3-1) = foo (2);. Hora 2: 2%2=0 así que esto solicitará IF parte Entonces se llamará a foo (2-3) = foo (-1). Hora 3: -1 > 0 = False Entonces se llamará al método de impresión.

El sistema imprimirá -1. La función Time 3 finalizará y pasará a la función Time 2

El sistema imprimirá 2 La función Time 2 finalizará y pasará a la función Time 1

El sistema imprimirá 3.

Entonces la salida -1 2 3

1
K.Suthagar 13 dic. 2016 a las 23:34