rekursive Methode

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 >>>?
 

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.
 

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...
 

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?
 

Meniskusschaden

Top Contributor

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 ...
 

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.
 

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?
 

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?
 

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?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Rekursive Methode Java Basics - Anfänger-Themen 13
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
C Rekursive Methode in Interative Methode umwandeln Java Basics - Anfänger-Themen 17
G Rekursive Methode mit 2 Aufrufen Java Basics - Anfänger-Themen 1
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
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
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
Viktor A. Kaiser Rekursive Algorithmen Java Basics - Anfänger-Themen 9
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
S Rekursive Kombinationen Java Basics - Anfänger-Themen 6
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
schredder Rekursive Quadratzahlen - Ergebnisprozedur Java Basics - Anfänger-Themen 1
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
L Rekursive Methoden Java Basics - Anfänger-Themen 14
J Rekursive Folge (a=a-1) Java Basics - Anfänger-Themen 9
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
MiMa 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

Ähnliche Java Themen

Neue Themen


Oben