Rekursion Handsimulation

LokenID

Mitglied
Hallo,

folgender Code:

Java:
public class Obscure{
public static void obscure(int x, int y){
if (x*y<=4)
return;
Write.Line("x: "+x);
if (x>=y)
obscure(x-1, y);
else
obscure(y, x-1);
Write.Line("y: "+y);
}
public static void main(String[] args){
obscure(3, 4);
}
}

Aufgabe ist nachzuvollziehen was der Code macht. Soweit komm ich:
x:3
x:4
x:3

dann komm ich mit 2,2 zur ersten if-Bedingung. Durch Return brech ich die Schleife ab und dann?
???:L
 

ARadauer

Top Contributor
Durch Return brech ich die Schleife ab und dann?
dann gehts dort weiter wo dieses obscure das gerade läuft aufgerufen wurde. Also konkret im dritten (oder je nach dem wie oft schon) Aufruf in der Zeile 10. dann ist diese methode fertig, dann läuft der zweite Aufruf in der zeile 10, dann der erste

also
y:irgendwas
y:irgendwas
y:irgendwas
...
bis if (x*y<=4)
x:irgendwas
x:irgendwas
x:irgendwas
x:irgendwas
 

ARadauer

Top Contributor
ähmn ja... :pfeif: war Absicht, wollte schaun ob wer mitdenkt...

Vielleicht noch ein Tipp von mir: Sauber einrücken, überall Klammern machen und ein par Ausgaben noch rein und das ganze ist viel besser nach zu vollziehen...

Java:
public class Obscure
{
    public static void obscure(int x, int y, int aufruf)
    {
        System.out.println("rein in Aufruf: " + aufruf);
        if (x * y <= 4)
        {
            System.out.println("raus aus aufruf: "+aufruf);
            return;
        }
        System.out.println("x: " + x);
        if (x >= y)
        {
            obscure(x - 1, y, aufruf + 1);
        }
        else
        {
            obscure(y, x - 1, aufruf + 1);
        }
        System.out.println("y: " + y);
        System.out.println("raus aus aufruf: "+aufruf);
    }

    public static void main(String[] args)
    {
        obscure(3, 4, 1);
    }
}
 

LokenID

Mitglied
ups die ging beim kopieren verloren

wo du es erwähnst seh ich auch wo mein Fehler war. Ich war der Meinung die write.line y gehört speziell zum else Fall, tut sie aber gar nicht o_O
Danke

Java:
public class Obscure{
     public static void obscure(int x, int y){
       if (x*y<=4)
            return;
       Write.Line("x: "+x);
       if (x>=y)
           obscure(x-1, y);
       else
          obscure(y, x-1);
      Write.Line("y: "+y);
}

 public static void main(String[] args){
      obscure(3, 4);
 }
}
 

Neue Themen


Oben