rekursive Methode

J

JavaAnfänger1235

Bekanntes Mitglied
Hallo,
es geht um die Ausgabe folgendes Programms:
Java:
public class Aufg5 {

static String a ="";
public static void f ( int i )
{
System . out . println ( i ) ;
if ( i > 0 ) {
   
a = a + "<" ;
f ( i-1);
a = a + ">" ;
}
else {
   
a = a + "+" ;
}
}
public static void main ( String [ ] args )
{
f ( 3 ) ;
System . out .println ( a ) ;
}
}

Also erstmal ist klar, dass zeilenweise 3 2 1 0 ausgegeben wird. Dann ist mir auch klar, dass <<<+ ausgegen wird, jedoch nicht warum auch noch >>> ?
Die Methode ruft sich doch immer wieder selbst auf und fängt immer bei f(i-1) von vorne an nur um 1 verringert. Im Fall, wo sie Null ist kommt dann noch, das + dazu, aber woher kommt das >>>?
 
M

Meniskusschaden

Top Contributor
Die Methode ruft sich doch immer wieder selbst auf und fängt immer bei f(i-1) von vorne an nur um 1 verringert. Im Fall, wo sie Null ist kommt dann noch, das + dazu, aber woher kommt das >>>?
Wenn f(0) abgearbeitet wurde, ist die Programmausführung noch nicht abgeschlossen, sondern es wird an die Stelle zurück gesprungen, an der f(0) aufgerufen wurde. Am besten spielst du es mal als Schreibtischtest bis zum Ende durch.
 
F

FawKes100

Aktives Mitglied
Das Problem liegt in dem zweiten Fall der Bedingung. Sprich ist i kleiner gleich 0, wird a=a + "+" gerechnet.
Warum das ausgegeben wird sollte somit eigentlich klar sein: In deiner Hauptmethode lässt du a ausgeben und durch die vorhergegangenen Additionen bekommst du <<<+>>> ausgegeben.

Wenn du die Methode wieder neu aufrufst über f(i-1), bleibt die Methode da erstmal stehen... Ist i dann irgendwann kleiner gleich 0, wird durch den selbstaufruf aber erst der zweite Ausgang der Bedingung a =a+ "+" berechnet. Anschließend wird mit den Rechnungen a = a+ ">" weiter verfahren, sodass eben diese Ausgabe zustande kommt. Rufst du die Methode in der Hauptmethode mit dem parameter 4 auf, so wirst du 4 größer und kleiner zeichen jenseits des "+" sehen...
 
J

JavaAnfänger1235

Bekanntes Mitglied
Mir ist das nicht klar.
Ich ruf die Methode auf für i=3. Es geht dann bis zur Stelle f(2). Danm geht es doch wieder von vorne los also mit system.out.println(2) und wieder bis f(1) usw.
Oder liege ich da schon falsch?
 
J

JavaAnfänger1235

Bekanntes Mitglied
Ich komme doch gar nicht an die Stelle wo > ausgegeben wird, weil entweder die Methode von neu anfängt oder ich in den else Fall komme.
 
M

Meniskusschaden

Top Contributor
Wo geht der Programmablauf denn normalerweise weiter, wenn eine aufgerufene Methode fertig ist?
 
J

JavaAnfänger1235

Bekanntes Mitglied
Dann wird doch 0 ausgegeben und man kommt in den else Zweig mit dem +
 
M

Meniskusschaden

Top Contributor
Das geschieht, WÄHREND der Abarbeitung von f(0). In welcher Zeile geht es NACH der Abarbeitung von f(0) weiter?
 
J

JavaAnfänger1235

Bekanntes Mitglied
Dann mit der nächsten einfach mit >. Ich hätte gedacht mit f(i-1) springt man an dem Anfang der Methode?
 
M

Meniskusschaden

Top Contributor
J

JavaAnfänger1235

Bekanntes Mitglied
D.h f(i-1) wird ausgeführt und gleichzeitig dann auch >.
Wie kommt es dann, dass erst das + kommt und dann>>>
:(
 
M

Meniskusschaden

Top Contributor
Das + wird während der Abarbeitung von f(0) angehängt. Dann ist der Aufruf von f(0) fertig und die unterbrochene Ausführung von f(1) wird nach der Zeile f(i-1);fortgesetzt. Es wird also ein > angehängt. Dann ist die Ausführung von f(1) beendet und die unterbrochene Ausführung von f(2) wird nach der Zeile f(i-1);fortgesetzt ...
 
J

JavaAnfänger1235

Bekanntes Mitglied
D.h die Methode bleibt 3 mal stehen bei f(i-1) und wird dann rückwärts ausgeführt oder. Wieso ist das denn so?
 
M

Meniskusschaden

Top Contributor
D.h die Methode bleibt 3 mal stehen bei f(i-1) und wird dann rückwärts ausgeführt oder. Wieso ist das denn so?
Was wäre denn alternativ denkbar? Das ist die natürliche Ausführungsreihenfolge. Bei nicht-rekursiven Methoden ist es doch auch so, dass es nach deren Aufruf dort weiter geht, wo der Aufruf statt fand. Warum sollte das bei rekursiven Methoden anders sein? Ich empfehle dir noch einmal, das in einem Schreibtischtest komplett durchzuspielen.
 
J

JavaAnfänger1235

Bekanntes Mitglied
Ok also dann ist es doch so:
Zuerst ist i=3. Dann wird 3 ausgegeben und in a ein < gespeichert. Dann wird f(2) aufgerufen, 2 ausgegen und in a wieder < gespeichert usw bis f(0) kommt, dann wird 0 ausgeben. Danach geht es mit der Stelle f(0) weiter, also dort wo die Abarbeitung "stehen geblieben" war. Dann kommt zu a ein >. Dann ist geht es weiter mit f(1), denn dort war ja auch unterbrochen, wieder ein > und das gleiche mit f(2). Danach ist man fertig, da nur die Schritte für i-1 unterbrochen wurden oder?
 
M

Meniskusschaden

Top Contributor
Ja. Nach Abarbeitung von f(2) wird in f(3) das letzte > angehängt. Danach geht es in der main-Methode weiter, wo der String ausgegeben wird.
 
J

JavaAnfänger1235

Bekanntes Mitglied
Ich danke dir. Das habe ich endlich verstanden:) Danke vielmals:)
Ich hätte noch kurz eine andere Frage. Wenn ich ein Klass Ober habe und Unter, die von Ober erbt. Ich erzeuge ein Objekt von Unter mit Typ Ober. Dann ist ja klar, dass überschriene Methoden des dynamischen Typs unter gerufen werden.
Wenn ich jetzt eine Methode g() in der Oberklasse habe(gibt es nur dort), die in g eine Methode f() aufruft, die von Unter überschrieben wird , wird dann erst die Methode g aufgerufen aus Ober, da es diese nirgendwo anders gibt und dann f in der Unterklasse aufgerufen?
 
M

Meniskusschaden

Top Contributor
Das kannst du eigentlich sehr leicht heraus finden, indem du es einfach programmierst.;)
 
J

JavaAnfänger1235

Bekanntes Mitglied
Ja habe ich und so ist es auch.
Ist es dann allgemein immer so, wenn ich ein Objekt der Unterklasse habe vom Typ der Oberklasse und eine Methode aufrufe die nur in der Oberklasse existiert, dann wird diese nur aufgerufen, weil man referenz vom typ der Oberklasse ist?
 
M

Meniskusschaden

Top Contributor
Du kannst ja mal ein Objekt der Unterklasse deklarieren und testen, ob sich die Methode der Oberklasse aufrufen lässt.;)
 
J

JavaAnfänger1235

Bekanntes Mitglied
Als wenn ich Unter x=new Unter() schreibe und die Methode von Ober rufe geht das. Wsl weil die Unter alles vom Ober erbt?
 
J

JavaAnfänger1235

Bekanntes Mitglied
Danke dir :)
Ich quäle dich nicht mehr mit meinen Fragen :D
Schönen Abend noch:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
D Rekursive Methode Java Basics - Anfänger-Themen 8
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
S Rekursive Methode Java Basics - Anfänger-Themen 8
O Rekursive Methode Java Basics - Anfänger-Themen 4
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
K Rekursive Methode Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
P Methoden Rekursive Methode für Potenzen Java Basics - Anfänger-Themen 2
S Int zu Hexadezimal - Rekursive Methode Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
S Methoden rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
E Rekursive Methode Java Basics - Anfänger-Themen 3
A Rekursive Methode in Iterative umwandeln Java Basics - Anfänger-Themen 6
C Rekursive Methode - Ziffern in Zahl Java Basics - Anfänger-Themen 33
G Rekursive Methode Java Basics - Anfänger-Themen 3
E Rekursive Methode mit Zufallsarray Java Basics - Anfänger-Themen 6
E Rekursive Methode Java Basics - Anfänger-Themen 18
M Rekursive Methode - wo ist der Fehler? Java Basics - Anfänger-Themen 4
J rekursive methode Java Basics - Anfänger-Themen 6
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
J Rekursive Methode Java Basics - Anfänger-Themen 11
G Rekursive Methode Java Basics - Anfänger-Themen 5
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5
G rekursive Methode Java Basics - Anfänger-Themen 3
G rekursive u iterative Methode Java Basics - Anfänger-Themen 8
G Rekursive Methode Java Basics - Anfänger-Themen 7
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
M Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
B Datentypen Suchbaum - Rekursive Ausgabe Java Basics - Anfänger-Themen 1
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
S Eine rekursive Lösung Java Basics - Anfänger-Themen 4
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
shiroX OOP Rekursive und Iterative Definition Java Basics - Anfänger-Themen 2
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
N Methoden Rekursive Fibonaccizahlen mit Array Java Basics - Anfänger-Themen 2
R Rekursive Ausgabe eines Binärbaums Java Basics - Anfänger-Themen 4
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
S Labyrith Rekursive Wegsuche Java Basics - Anfänger-Themen 4
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
A rekursive Listen in Java? Java Basics - Anfänger-Themen 5
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
K Rekursive Methoden Java Basics - Anfänger-Themen 15
K Rekursive Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
D rekursive Summenberechnung Java Basics - Anfänger-Themen 8
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
kulturfenster rekursive Binaere Suche Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
B Rekursive & schreiben im ArrayList Java Basics - Anfänger-Themen 2
J Rekursive Fkt. Java Basics - Anfänger-Themen 2
A Rekursive Dateisuche Java Basics - Anfänger-Themen 12
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
N rekursive Beispiele Java Basics - Anfänger-Themen 3
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16
D rekursive ausgabe einer zahl Java Basics - Anfänger-Themen 14
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
M Rekursive Binärsuche Java Basics - Anfänger-Themen 6
S rekursive methoden Java Basics - Anfänger-Themen 5
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
Eule25 Methode mit Array Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
T Methode implementieren Java Basics - Anfänger-Themen 21
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21

Ähnliche Java Themen

Anzeige

Neue Themen


Oben