Kannst du vl die Lösung bzw. den Lösungsweg schreiben ?
Wenn ich jetzt die einfach die Lösung hinschreibe kannst DU es immernoch nicht...Wenn ich die Aufgabe lösen könnte, würde ich dann hier nicht posten. Das Problem ist, ich kann replicate() methode in diagonal nicht umsetzen...
Man darf die Schleifen nicht verwenden, nur die Rekursion.Bei deiner Rekursionsaufgabe gibts erstmal 2 wesentliche Dinge die du beachten musst:
- Die Abbruchbedingung
- Sonst
Die Abbruchbedingung hast du ja schon jetzt musst du dir noch überlegen was du sonst machen willst.
Bei jedem neuen Rekursionsaufruf soll dein n um 1 verringert ausgegeben werden. (1. Punkt). [das sollte eigentlich machbar sein]
Jetzt muss vor jeder Zahl noch die richtige Anzahl an "_" stehen. Das machst du am besten mit einer for-Schleife. Die "Formel" um die richtige Anzahl auszugeben kannst du dir ja mal selber überlegen![]()
Die willste ja in diagonal garnicht aufrufen.Mit replicate ('_', n-m) kann man aber die replicate meth aufrufen .
Danke für deine Bemühung, gehts leider nicht.Die willste ja in diagonal garnicht aufrufen.
m und _ hängen auch zusammen sowie m auch wichtig für deine terminierung ist
Und die Zahlen um 1 verringern ist schon klar.
System.out.println(n);
diagonal(m,n-1);
n - m
bestimmen. Du musst diese Differenz noch in Zusammenhang mit der Anzahl der Zeichen bringen.replicate -> gibt das Zeichen c n-mal aus.Dann stell deine Frage nächstes mal genauer .. dann kann man sich das rumgerate sparen
Ich würde übrigens noch mal die replicate Methode anschauen. Die wird nicht das machen was du erwartest![]()
Aber nicht in der Form wie du es bei derreplicate -> gibt das Zeichen c n-mal aus.
diag(int,int)
Methode brauchst /**
* Hier System.out.print(); verwenden nicht System.out.println(LINE)();
* Da sonst jeder underscore in eine eigene Zeile geschrieben wird.
*/
public static void replicate(char c, int n) {
if (n > 0) {
System.out.print(c);
replicate(c, n - 1);
}
}
/**
* Wenn m = 5 und n = 10 ist n-m die anzahl der benötigten underscores.
* Dann wird Rekursiv aufgerufen und m um einen erhöht.
* Terminierung der Rekursion ist erreicht sobald m = n ist
* dann muss nurnoch n ausgegeben werden.
*/
public static void diagonal(int m, int n){
if(m<n){
diagonal(m + 1, n);
replicate('_', n-m);
System.out.println(m);
}
else{
System.out.println(n);
}
}
public static void main(String[] args) {
diagonal(5,10);
}