Rekursion - Tipps zum Vorgehen

J

JblueG

Gast
Hallo,

ich habe folgendes Problem. Ich bekomme es einfach nicht hin rekursive Prüfungen zu programmieren.
Ich weiß nicht wieso, ich habe eigentlich nie Probleme in analytischen und logischen Sachen und könnte für jedes Problem eine Lösung finden, nur eben keine rekursive.
Ich war auch noch nie gezwungen sowas alleine zu durchdenken...bis jezt.
Könnt ihr mir vielleicht ein paar Tipps geben, wie ich prinzipiell vorgehen kann?
Dafür wäre ich sehr dankbar!


Noch was zum konkreten Problem. Ich habe folgende Baumstruktur
-OberElement
_____- Zelle
__________-Zelle
________________-Zelle
________________-Zelle
__________-Zelle
________________-Zelle
________________-Zelle
______________________-Zelle
______________________-Zelle
__________-Zelle

Die Klasse Zelle hat dabei ein Attribut, zB boolean gelb und jeweils eine Liste von sich selbst, in der
Objekte drin sein können oder sie kann auch leer sein.
Und ich möchte diese Baumsturktur rekursiv durchgehen und überprüfen, ob das Attribut gelb IRGENDWO einmal mit true belegt ist.

WICHTIG: Ich möchte keine Lösung, also keinen JavaCode sehen. Ich möchte nur Vorschläge/Tipps, wie ich Vorgehen kann, damit ich selbst eine Lösung finde! Und die ich mir am besten auch für die Zukunft merken kann.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
eine Eimerkette ? Wikipedia zum Löschen eines Brandes wird gebildet, was hat jeder einzelne zu tun?

an seinen Nachfolger weiterreichen, bei dir etwas an einem Unterelement aufrufen, sind mehrere vorhanden, dann eben bei all diesen,
mehr ist erstmal gar nicht konkret zu sagen, näher zu erklären gibt es dabei auch nichts,

hilft das schon?
 
B

bone2

Gast
Also ich würde einfach über alle Zellen schleifen und dann bei jeder zelle kontrollieren, ob es unterzellen gibt. gibt es welche rufe ich wieder die selbe methode auf und schleife durch alle unterzellen. das geht rekursiv so durch. es endet wenn man man keine unterzellen mehr findet oder eventuell bedingung xy erfüllt ist (sudoku löser, man kann wieder nach oben sobald ein fehler da ist) und man kommt durch die ebenen langsam wieder nach vorne

sudoku löser ist eine gute übung
 
Zuletzt bearbeitet von einem Moderator:
B

buzz!dev

Gast
Wenn deine Datenstruktur bereits ein Baum ist, wieso benutzt du dann nicht eine der Traversierungen für Graphen?
 
J

JblueG

Gast
hmm also meine aktuelle Lösung sieht so aus
Java:
public static void main(String[] args) {
		
		boolean notizVorhanden = istGelbVorhanden(oberElement);
	}

	
	private static boolean istGelbVorhanden(OberElement oberElement) {
		Zelle ersteZelle = oberElement.getZelle();
		
		boolean hatNotiz = ueberpruefeZellen(ersteZelle.getZellen());
		return hatNotiz;
	}

	private static boolean ueberpruefeZellen(List<Zelle> zellen) {
		for(Zelle zelle : zellen) {
			System.out.println(zelle.getName());
			if(zelle.isGelb()) {
				return true;
			}
			if(!(zelle.getZellen()==null || zelle.getZellen().size()==0)) {
				ueberpruefeZellen(zelle.getZellen());
			}
		}
		return false;
	}


aber sie funktioniert nicht


ich glaube ich versuche erstmal eine Methode zu schreiben die einfach nur durch alle Elemente durchgeht ohne was zu prüfen
 
S

SlaterB

Gast
in Zeile 21 gibt der Rekursionsaufruf etwas zurück, aber ob true oder false, du ignorierst den Rückgabewert

ein Logging in der Methode wäre auch immer interessant, wird die Methode öfters ausgeführt?
kommt das if je erfolgreich dran? usw.
 
J

JblueG

Gast
@SlaterB

ahja stimmt...ok das kommt gleich dran...
ich hab jetzt erstmal was was überall durchläuft einmal und von allem einmal den Namen ausgibt
Java:
	public static void main(String[] args) {
		OberElement oberElement = baueElementZusammen();
		
		boolean GelbVorhanden = istGelbVorhanden(oberElement);
	}

	
	private static boolean istGelbVorhanden(OberElement oberElement) {
		Zelle ersteZelle = oberElement.getZelle();
		
		boolean hatGelb = ueberpruefeZellen(ersteZelle.getZellen());
		return hatGelb;
	}

	private static boolean ueberpruefeZellen(List<Zelle> zellen) {
		for(Zelle zelle : zellen) {
			System.out.println(zelle.getName());
			if(!(zelle.getZellen()==null || zelle.getZellen().size()==0)) {
				ueberpruefeZellen(zelle.getZellen());
			}
		}
		return false;
	}

das funktioniert auch =))
 
S

SlaterB

Gast
> ich hab jetzt erstmal was was überall durchläuft einmal und von allem einmal den Namen ausgibt

das ist natürlich ein lobenswertes Vorgehen, hattest du ja vorher schon geschrieben,
meinen Log-Vorschlag schon vorausgeeilt, soweit kommen weniger als man denkt, deshalb immer ein Extralob wert ;)
 
J

JblueG

Gast
:) Thx.

also so funktionierts:

Java:
	public static void main(String[] args) {
		OberElement oberElement = baueElementZusammen();
		
		boolean notizVorhanden = istGelbVorhanden(oberElement);
	}

	
	private static boolean istGelbVorhanden(OberElement oberElement) {
		Zelle ersteZelle = oberElement.getZelle();
		
		boolean hatGelb = ueberpruefeZellen(ersteZelle.getZellen());
		return hatGelb;
	}

	private static boolean ueberpruefeZellen(List<Zelle> zellen) {
		for(Zelle zelle : zellen) {
			System.out.println(zelle.getName());
			if(zelle.isGelb()) {
				return true;
			}
			if(!(zelle.getZellen()==null || zelle.getZellen().size()==0)) {
				if(ueberpruefeZellen(zelle.getZellen())== true) {
					return true;
				}
			}
		}
		return false;
	}

Allerdings scheint mir das komplizierter zu sein als nötig, weil da 2 Abprüfungen auf true sind. Eigentlich müsste 1 reichen. Wenn jemand ein Verbesserungsvorschlag einfällt nehm ich den gerne an.
 
B

bone2

Gast
das ist schon okay so, du hast ja auch 2 sachen die du prüfst bzw 3 mögliche enden:
a) du willst zurück wenn diese zelle gelb ist
b) du willst zurück wenn eine unterzelle gelb ist
c) du musst zurück wenn der ast zu ende ist

[OT]besser:
Code:
if(ueberpruefeZellen(zelle.getZellen())) {
[/OT]
 
I

IchBinBabei

Gast
Java:
import java.util.ArrayList;
import java.util.List;

public class Zelle {
	public boolean gelb;
	public List<Zelle> zellen;
	public Zelle(boolean gelb) {
		this.gelb = gelb;
		this.zellen = new ArrayList<Zelle>();
	}
	
	public boolean istGelb() {
		if (this.gelb) {
			return true;
		}
		for (Zelle zelle : zellen) {
			if (zelle.istGelb()) {
				return true;
			}
		}
		return false;
	}

    public static void main(String[] args) {
        Zelle zelle = new Zelle(false);
        zelle.zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.get(0).zellen.add(new Zelle(true));
        zelle.zellen.get(0).zellen.get(0).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.get(1).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.get(1).zellen.add(new Zelle(true));
        zelle.zellen.get(0).zellen.get(1).zellen.get(1).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.get(1).zellen.get(1).zellen.add(new Zelle(false));
        zelle.zellen.get(0).zellen.add(new Zelle(false));
        
        System.out.println(zelle.istGelb());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
M Lösungsweg Rekursion Java Basics - Anfänger-Themen 1
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
D Rekursion - Ich raffs nicht Java Basics - Anfänger-Themen 16
N Methoden Rekursion mit Kreisen Java Basics - Anfänger-Themen 7
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
J Rekursion Java Basics - Anfänger-Themen 22
T Rekursion Programmierverständnis Java Basics - Anfänger-Themen 12
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
Zeppi Rekursion Java Basics - Anfänger-Themen 15
V Backtracking und Rekursion Java Basics - Anfänger-Themen 15
L REKURSION Java Basics - Anfänger-Themen 13
Kirby.exe Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1
B Rekursion Basic Java Basics - Anfänger-Themen 15
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
G Rekursion Java Basics - Anfänger-Themen 20
M Rekursion Java Basics - Anfänger-Themen 7
F Hilfe bei Rekursion... Java Basics - Anfänger-Themen 4
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
O Rekursion ordentlich aufschreiben Java Basics - Anfänger-Themen 2
B Rekursion verstehen Java Basics - Anfänger-Themen 4
O Rekursion Java Basics - Anfänger-Themen 2
E Rekursion verstehen. Java Basics - Anfänger-Themen 4
E Rekursion Kisten befüllen Java Basics - Anfänger-Themen 10
E Rekursion verstehen Java Basics - Anfänger-Themen 2
O Rekursion, String Java Basics - Anfänger-Themen 8
N Invertierte Rekursion??? Java Basics - Anfänger-Themen 5
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
L Rekursion im Baum Java Basics - Anfänger-Themen 9
E Pfade eines Baums angeben ohne Rekursion Java Basics - Anfänger-Themen 20
L Rekursion Baumknoten Java Basics - Anfänger-Themen 8
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
L Rekursion Modulo Java Basics - Anfänger-Themen 7
I Rekursion Java Basics - Anfänger-Themen 11
H Rekursion Java Basics - Anfänger-Themen 7
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
S Frage zu Rekursion... Java Basics - Anfänger-Themen 15
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
S Frage zu einer Rekursion Java Basics - Anfänger-Themen 15
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Rekursion Java Basics - Anfänger-Themen 5
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
N Rekursion Java Basics - Anfänger-Themen 2
B Rekursion - Übung Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
P Rekursion Java Basics - Anfänger-Themen 19
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
M Rekursion schreiben Java Basics - Anfänger-Themen 16
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T Array Rekursion Java Basics - Anfänger-Themen 1
B lineare und schlichte Rekursion Java Basics - Anfänger-Themen 1
A Rekursion Java Basics - Anfänger-Themen 2
B Rekursion Java Basics - Anfänger-Themen 3
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
A Lineare Rekursion Java Basics - Anfänger-Themen 6
P Hilfe zur Rekursion? Java Basics - Anfänger-Themen 2
B Rekursion Schneeflocke - Kurze Frage zur Methode Java Basics - Anfänger-Themen 11
L Rekursion Java Basics - Anfänger-Themen 4
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
kilopack15 Rekursion und Schleifen Java Basics - Anfänger-Themen 27
E Rekursion Java Basics - Anfänger-Themen 10
G rekursion nicht verstanden Java Basics - Anfänger-Themen 5
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
E Methoden String wird in Rekursion nicht überschrieben Java Basics - Anfänger-Themen 2
T 2fach Rekursion. Java Basics - Anfänger-Themen 4
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
P Methoden Primzahltest mit Rekursion Java Basics - Anfänger-Themen 3
C Rekursion überführen in eine normale methode Java Basics - Anfänger-Themen 1
M Methoden Rekursion nachvollziehen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben