einfache Rekursion

Status
Nicht offen für weitere Antworten.

BlubBlub

Bekanntes Mitglied
hi, ich bin mir bei einer sache unsicher, vielleicht könnt ihr mir da helfen.
wenn ich folgendes programm hab:

Java:
class Test
{

	public static void recurse(int deep)
	{	
		if(deep == 4){}
		else recurse(deep+1);
	}
	
	public static void main(String[] args) 
	{
		recurse(0);
	}

}

könnte ich ansstelle else recurse(deep+1) auch schreiben:

Java:
.....

else recurse(deep++);
....

wären dies exakt dieselben programme oder würde mir das recurse(deep++); bevor die methode ausgeführt wird, die variable deep auch noch hochsetzen. also nicht nur den parameter in der "neuaufgerufenen "funktion, sondern auch den in der "aktuell" befindlichen funktion. hoffe ich konnte das verständlich ausdrücken worum es mir geht.
 

Ark

Top Contributor
Dann musst du [c]++deep[/c] verwenden. Allerdings klingt das überhaupt eher nach einem Designfehler.

Ark
 

BlubBlub

Bekanntes Mitglied
ok danke.

dann lass ichs bei deep+1.

Java:
class versuch
{

	public static void recurse(int deep)
	{
		System.out.println(deep);
		
		if(deep == 4){}
		else recurse(deep+1);
		
		System.out.println(deep);
	}
	
	public static void main(String[] args) 
	{
		recurse(0);
	}

}

was mich wunder ist, wenn ich dieses programm starte dann gibt es mir aus:
0
1
2
3
4
4
3
2
1
0


was ja auch logisch und nachvollziehbar ist.
wenn ich aber

recurse(deep++); mache gibt er mir aus:
0
0
0
0
0
.......


ich hätte wenn überhaupt erwartet, dass er mir ausgibt:

0
1
2
3
4
4
4
3
2
1

weil er meines achtens nach ja durch das deep++ den derzeitigen paramter auch hochsetzt bevor die funktion recurse(deep++) ausgeführt wird.
ich weiß nicht ganz wo mein denkfehler darin liegt.
 

musiKk

Top Contributor
Na wie Ark geschrieben hat: Du bräuchtest Preinkrementoperator (was für ein tolles Wort) [c]++deep[/c]. In Deinem Beispiel wird erst die Methode ausgeführt und dann inkrementiert.
 

BlubBlub

Bekanntes Mitglied
löl preinkrementoperator ist echt nen geiles wort xD ....

nagut ich versteh schon was ich verwendent sollte, werd ich auch tun ...

ich kann nur die ausgabe nicht nachvollziehen, diesen preinkrementoperator nicht verwende, also die

0
0
0
0
0
0
....


anstelle von

0
1
2
3
4
4
4
3
2
1

aber dann nehm ichs einfach so hin und merke mir dass ich ++deep bzw. beeser deep+1 verwenden muss
 

musiKk

Top Contributor
Na da sollte doch alles klar sein? Du rufst die Methode rekursiv immer wieder mit 0 auf, weil es immer wieder in den else-Zweig geht.
 

BlubBlub

Bekanntes Mitglied
ich schreib euch mal auf, wie ichs mir vorstelle, dass diese deep++ funktioniert und warum ich nicht verstehe dass da 0 0 0 0 0 ... ausgegeben wird.

Java:
class versuch
{
 
    public static void recurse(int deep) // 1.aufrur deep = 0 
    {
        System.out.println(deep); // ausgabe 0
        
        if(deep == 2){}
        else recurse(deep++); // deep = deep + 1 also deep = 0 + 1 somit deep = 1 ; ( auch obiges deep wird somit um eins raufgesetzt)
        
        System.out.println(deep);
    }
    
    public static void main(String[] args) 
    {
        recurse(0);
    }
 
}


Java:
 public static void recurse(int deep) // 2.aufrur deep = 1 
    {
        System.out.println(deep); // ausgabe 1
        
        if(deep == 2){}
        else recurse(deep++); // deep = deep + 1 also deep = 1 + 1 somit deep = 2
        
        System.out.println(deep);
    }

Java:
    public static void recurse(int deep) // 3.aufrur deep = 2
    {
        System.out.println(deep); // ausgabe 2
        
        if(deep == 2){}
        else recurse(deep++); 
        
        System.out.println(deep); //ausgabe 2
    }

Java:
    public static void recurse(int deep) //  zum 2.aufruf zurückgekehrt deep = 2  (deep nicht gleich 1. obwohl beim ersten 2.aufruf deep = 1 war; jetzt aber deep = 2 weil vor dem ausführen des 3. rekursiven aufrufs wurde deep = deep + 1 gerechnet also wurde diese variable erhöht)
    {
        System.out.println(deep); 
        
        if(deep == 2){}
        else recurse(deep++); //ab hier gehts weiter
        
        System.out.println(deep); // ausgabe 2
    }

Java:
    public static void recurse(int deep) // zum 1.aufruf zurückgekehrt deep = 1 (nicht 0 grund siehe oben) 
    {
        System.out.println(deep); 
        
        if(deep == 2){}
        else recurse(deep++); // ab hier gehts weiter
        
        System.out.println(deep); //ausgabe 1 
    }

rekursion abgearbeitet


ausgabe insgesamt:

0
1
2
2
2
1

so stelle ich mir die abarbeitung der rekursion vor, wenn man deep++ als parameter übergibt.
ich weiß dass da ein denkfehler ist aber ich weiß nicht genau worin.
 

musiKk

Top Contributor
Java:
else recurse(deep++); // deep = deep + 1 also deep = 0 + 1 somit deep = 1 ; ( auch obiges deep wird somit um eins raufgesetzt)
Was hier passiert ist folgendes (und in genau in dieser Reihenfolge):
1. recurse wird mit deep (0) aufgerufen
2. deep wird um eins inkrementiert
In der erneut aufgerufenen Methode recurse ist deep also wieder 0 und das Spiel beginnt von vorne.
 

Leroy42

Top Contributor
Was hier passiert ist folgendes (und in genau in dieser Reihenfolge):
1. recurse wird mit deep (0) aufgerufen
2. deep wird um eins inkrementiert
In der erneut aufgerufenen Methode recurse ist deep also wieder 0 und das Spiel beginnt von vorne.

Jau! Wenn das keine Endschlosschleife wäre, würden
beim Zurückkehren die zuvor erhöhten (lokalen) deep-Werte
ausgegeben. :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Einfache Rekursion - Wert wird nicht in Variable gespeichert Java Basics - Anfänger-Themen 7
W Einfache Rekursion Java Basics - Anfänger-Themen 14
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
B Einfache OCR zur Zahlenerkennung? Java Basics - Anfänger-Themen 6
M Einfache Datenfilterung Java Basics - Anfänger-Themen 15
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
E einfache Frage zu private Java Basics - Anfänger-Themen 26
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
U Einfache Aufgabe Java Basics - Anfänger-Themen 5
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
M Einfache Rechnung(R=U/I) Java Basics - Anfänger-Themen 12
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
W Einfache Passwortabfrage funktioniert nicht Java Basics - Anfänger-Themen 3
P einfache GUI-Elemente Java Basics - Anfänger-Themen 10
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
L einfache Klasse erstellen Java Basics - Anfänger-Themen 16
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
T Einfache Textausgabe .java unter OS X Java Basics - Anfänger-Themen 13
A [Hilfe] einfache Aufgabe Java Basics - Anfänger-Themen 26
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
M einfache java application Java Basics - Anfänger-Themen 4
S Kann einfache Texteingabe nicht auswerten! Java Basics - Anfänger-Themen 3
M einfache frage zum Jdk-Compiler Java Basics - Anfänger-Themen 3
Spin einfache Frage zu Klassen Java Basics - Anfänger-Themen 12
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
C "einfache" If-Abfrage Java Basics - Anfänger-Themen 15
H Einfache Ausgabe eines Arrays in einen File Java Basics - Anfänger-Themen 8
F Einfache Liste hinten was einfügen Java Basics - Anfänger-Themen 3
L Einfache Umrechnung Java Basics - Anfänger-Themen 2
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
K einfache Multiplikation Java Basics - Anfänger-Themen 6
S Einfache Rechnung mit Schleife Java Basics - Anfänger-Themen 10
G einfache Swing-GUI Java Basics - Anfänger-Themen 3
F Einfache Tastatureingabe Java Basics - Anfänger-Themen 2
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
S "einfache Klassengeschichten" keine Fehler, läuft Java Basics - Anfänger-Themen 2
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5
A Einfache Frage zur Mehrfachvererbung Java Basics - Anfänger-Themen 3
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
J eine einfache liste Java Basics - Anfänger-Themen 17
D Suche einfache Übungsaufgaben für den JavaCreator! Java Basics - Anfänger-Themen 5
R Einfache Messagebox Java Basics - Anfänger-Themen 9
N einfache Adressdatenbank in Textdatei Java Basics - Anfänger-Themen 8
I einfache Wiedergabe Java Basics - Anfänger-Themen 2
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K einfache Umfang und Flächenberechnung mit interfaces Java Basics - Anfänger-Themen 3
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
L MVC-einfache frage Java Basics - Anfänger-Themen 13
M einfache schleife Java Basics - Anfänger-Themen 7
M Einfache Schleife Java Basics - Anfänger-Themen 4
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
M Variablen Rekursion mit 2 Parameteren Java Basics - Anfänger-Themen 4
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben