# Scheinaufgabe



## ibrahim (26. Jun 2007)

Hallo,

ich muss eine Aufgabe programmieren und könnte Hilf gebrauchen. Wäre super nett, wenn mir jemand helfen würde.



> b) Schreiben Sie eine Methode
> void doppelDreieck(int n)
> die rekursiv folgende geometrische Figur der Größe n über System.out ausgibt
> (hier als Beispiel für n = 5):
> ...






```
public class Scheinaufgabe47 extends JavaKaraProgram {

	void linie(int n){
		if(n>0){
		System.out.print("*");
		linie(n-1);
		}
	else
	System.out.println();
	}

	void doppelDreieck(int n){ 
		if(n > 0){
		linie(n);
		doppelDreieck(n-1);
		}
	}

 
public void myProgram() {
    int leange = tools.intInput("Leange: ");
	doppelDreieck(leange);
  
  }
}
```

Das Problem liegt bei der rekursiven Methode doppelDreieck. Ich konnte nur das obere Dreieck programmieren. Für ein doppeltes Dreieck seh ich aber nur ein iterative Lösung (zwei for-Schleifen). Ich muss aber eine rekursive Methode schreiben...ich komme hier einfach nicht weiter. 

Hat jemand vielleicht einen Tipp? :bahnhof:


----------



## Ullenboom (26. Jun 2007)

Hallo,

ein Tipp: Rufe ein eigenes doppelDreieck2() mit 0 auf und lasse die Abbruchbedingung nicht bei n > 0 enden, sondern bei n > 4 oder so. Der rekursive Aufruf ist dann doppelDreieck2(n+1); 

Grüße

 Christian


----------



## kleiner_held (26. Jun 2007)

@Christian 
deinen Tip hab ich nicht verstanden, meiner Meinung nach muss er nur in der Methode doppelDreieck zwischen den Zeilen 15 und 16 einen Aufruf einfuegen.

mein Tip:
1. wenn du in der Methode doppelDreieck erst eine linie(n); malst und dann den rekursiven Aufruf doppelDreieck(n-1); ausfuehrst, kommt wie du festgestellt hast das raus:

```
*****
****
***
**
*
```

2. wenn du in doppelDreieck erst den rekursiven Aufruf doppelDreieck(n-1); ausfuehren wuerdest und dann eine linie(n); malst (also Zeile 14 und 15 in deinem Code vertauschst), kommt das raus:

```
*
**
***
****
*****
```

So - jetzt ist es eigentlich nicht sonderlich schwer beide Teile zu kombinieren :-D


----------



## tfa (26. Jun 2007)

kleiner_held hat gesagt.:
			
		

> @Christian
> deinen Tip hab ich nicht verstanden, meiner Meinung nach muss er nur in der Methode doppelDreieck zwischen den Zeilen 15 und 16 einen Aufruf einfuegen.



Genau. Die Zauberworte sind Pre-Order und Post-Order. Wenn man beides gleichzeitig macht, bekommt man zwei Dreiecke wie gewünscht.
tfa


----------



## Beni (26. Jun 2007)

Doppelpost

*geschlossen*


----------

