rekursiv

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 rekursiv

Was gibt folgendes (rekursive) Programm auf dem Bildschirm aus?
import IOulm.*;
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);
}
}

Beim ersten durch lauf nach obscure(3, 4)-> wird zu obscure(4, 2)??

Ich versteh nicht wie das überhaupt funktioniert
 
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Beim ersten durch lauf nach obscure(3, 4)-> wird zu obscure(4, 2)

richtig!

und welcher Aufruf folgt dann aus obscure(4, 2)?

Und wie sieht es mit der Ausgabe aus?
Das x wird oberhalb des rekursiven Aufrufs schon ausgegeben, das y erst danach.
Folglich werden erst alle x-e aus obscure(x, y) ausgegeben - und zwar in der Reihenfolge, wie die Funktion aufgerufen wird.
Anschließend werden die y in umgekehrter Reihenfolge ausgegeben.
Auf diesen Beitrag antworten »
neuling96

obscure(3, 4)-> wird zu obscure(4, 2)->obscure(3,2)->obscure(2,2)

Aber nach obscure(2,2)
Write.Line("x: "+x);

Also x=2?
Auf diesen Beitrag antworten »
eulerscheZahl

Bei obscure(2,2) wird ja schon abgebrochen, bevor es zur Ausgabe kommt.
Aber von den obscure davor ist jeweils noch ein x auszugeben, bevor überhaupt der rekursive Aufruf zustande kommt. Und danach eben in umgedrehter Reihenfolge das y.

Ich habe das Programm etwas modifiziert, damit ich zusätzlich noch erfahre, von welchem Funktionsaufruf die Ausgabe stammt.
Der Anfang sieht so aus:
code:
1:
2:
3:
x: 3 von obscure(3,4);
x: 4 von obscure(4,2);
x: 3 von obscure(3,2);

wie geht es weiter?
 
Auf diesen Beitrag antworten »
neuling96

dann für y:
y: 2
y: 2
y: 4
Auf diesen Beitrag antworten »
eulerscheZahl

passt Daumen hoch
Auf diesen Beitrag antworten »
neuling96

danke Wink
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »