richtige Rekursion?

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin richtige Rekursion?

Hallo, ich möchte drei Teilstücke hintereinander anfügen Tunnel, Bogen GUZS, Bogen UZS, Schluss. Dabei soll Schluss immer durchgeführt werden, wenn der Schlusspunkt gewisse Koordinaten erreicht, sonst nicht. Dabei sollen alle Möglichkeiten diese zu kombinieren (kombiniert werden Tunnel, Bogen GUZS, Bogen UZS und Schluss bricht die Kombination ab), bis zu einer gewissen Länge ermittelt werden. Mein Ansatz funktioniert nicht.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
public void rekursion(ArrayList<Point> apoint, double length, ArrayList<String> alstring)
{ 	if (length >200.0) return;
  	Point neu_tunnel = tunnel_rekursion(apoint.get(apoint.size()-2), apoint.get(apoint.size()-1)); 	length=length+10; 	apoint.add(neu_tunnel); 	alstring.add("Tunnel"); 
//	for (int i=0; i<apoint.size(); i++){
//		System.out.println(apoint.get(i));
 //	}
 //	System.exit(0);
 	rekursion(apoint, length, alstring);
 	Point neu_bogen_UZGS = bogen_UZGS_rekursion(apoint.get(apoint.size()-2), apoint.get(apoint.size()-1)); 	apoint.add(neu_bogen_UZGS);
 	alstring.add("Bogen"); 	length=length+5;
 	rekursion(apoint, length, alstring);
 	Point neu_bogen_GUZGS = bogen_GUZGS_rekursion(apoint.get(apoint.size()-2), apoint.get(apoint.size()-1));
 	apoint.add(neu_bogen_GUZGS);
 	alstring.add("Bogen");
 	length=length+5;
 	rekursion(apoint, length, alstring);
 	Point neu_schluss = schluss_rekursion(apoint.get(apoint.size()-2), apoint.get(apoint.size()-1));
 	System.out.println("Schlusskoordinaten " + neu_schluss.x +" " + neu_schluss.y);
 	if ((Math.abs(neu_schluss.x - 15.0) < 5.0) && (Math.abs(neu_schluss.y - 8.0) < 5.0))
 {
 		apoint.add(neu_schluss); 
		alstring.add("Schluss");
 		gesamt_point.add(apoint);
 		gesamt_elemente.add(alstring);
 		System.out.println("Im Annahmebereich");
 		return;
 	} 
	 	 	 }


Offensichtlich bleibt der Code irgenwie bei der ersten Rekursion hängen.
 
Auf diesen Beitrag antworten »
ed209

Ich verstehe nicht was du programmieren willst.

Was meinst du mit haengen bleiben? Ist es eine endlos-Rekursion? Dann sollte Java dir irgendwann um die Ohren fliegen.
In dem Fall wuerde ich mit einem Debugger im Einzelschritt durchgehen und gucken ob alle Aufrufe mit Vernuenftigen Werten passierne.
Auf diesen Beitrag antworten »
Haevelin

Die Rekursion endet irgendwann. Aber die Werte, die erzeugt werden sind nicht das was ich programmiert habe. Also gehe ich davon aus, dass die Rekursion falsch läuft. Es werden ausgehend von einem Tunnelelement der Länge 10 cm immer wieder Elemente angefügt die Bogen im Uhrzeigersinn, Länge 5 cm, Bogen gegen den Uhrzeigersinn, Länge 5 cm und Tunnelstück, Länge 10 cm angefügt. Wenn ein Schlussstück der Länge 5 cm angefügt wird, soll ein return erfolgen und gepfrüft werden, ob die Schlusskoordinaten erreicht wurden. Wenn ja, wird das zur Gesamtlösung hinzugefügt. Ich erhalte aber irrational hohe Werte mit Größen in der Ordnung 10 E 7 usw., was nicht sein kann, da die Gesamtlänge nicht höher sein soll als 200 cm (auch hier erfolgt ein return)
Auf diesen Beitrag antworten »
Haevelin

Vielleicht hängen die Schwierigkeiten damit zusammen, dass auf ArrayList nur eine Referenz stattfindet, und nicht die values, sondern die Referenz übergeben wird?
 
Auf diesen Beitrag antworten »
eulerscheZahl

Bei dem, was du uns verrätst, ist das schwer zu sagen.
Du verwendest z.B: die Funktion tunnel_rekursion, gibst dafür aber keinen Code an.
Auch ein beispielhafter Funktionsaufruf mit geeigneten Argumenten wäre hilfreich.
Wenn der Code compilierfähig ist, steigt die Chance auf Hilfe smile
 
Neue Frage »
Antworten »


Verwandte Themen

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