Bitte um Hilfe bei Quellcode (Rekursion)

mb77-97

Neues Mitglied
Hallo Leute, ich würde mich total freuen, wenn ihr mir bei der folgenden Lösung etwas helfen könntet, denn ich verstehe nicht ganz, was der Compiler bei dem Quellcode macht.
Der Code lautet:

public class Star {
public static void main (String[] args){
System.out.println(starString(3));
}

public static String starString(int n) {
if (n < 0) {
throw new IllegalArgumentException();
} else if (n == 0) {
return "*";
} else {
return starString(n - 1) + starString(n - 1);
}
}
}

Die Aufgabe lautete, es sollen immer so viele Sterne ausgeben, wie 2 hoch dem variablen int ergibt. (also int = 2 -> 2²= 4 Sterne oder int = 3 -> 2³= 8 Sterne)

Und soweit habe ich es verstanden: Setzen wir in der main-Method n = 3. Dann springt der Compiler zum else-Statement und zieht 1 ab, also n = 2. Dann kommt die rekursive Methode zum Einsatz, und das Ganze wiederholt sich so lange, bis n = 0. Wenn n gleich Null ist, wird für beide Seiten der rekursiven Funktion ein "*" ausgegeben (else-if Statement). Nach meinem Verständnis müsste das Programm jetzt zu Ende sein, und ich kann mir nicht erklären, wieso am Schluss acht Sterne ausgegeben werden.

Ich bedanke mich schon im Voraus für eure Hilfe.
Liebe Grüße!
 

Robat

Top Contributor
Versuch dir immer, wenn du so etwas nicht nachvollziehen kannst, die Methodenaufrufe aufzuschreiben
Code:
startString(n = 3) :: Methodenaufruf
-- else
---- return starString(n = 2) + starString(n = 2)
------starString(n = 2) :: Methodenaufruf
-------- else
---------- return starString( n = 1) + starString(n = 1)
------------ starString(n = 1) :: Methodenaufruf
-------------- else
---------------- return starString( n = 0) + starString(n = 0)
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------ starString(n = 1) :: Methodenaufruf
-------------- else
---------------- return starString( n = 0) + starString(n = 0)
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------starString(n = 2) :: Methodenaufruf
-------- else
---------- return starString( n = 1) + starString(n = 1)
------------ starString(n = 1) :: Methodenaufruf
-------------- else
---------------- return starString( n = 0) + starString(n = 0)
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------ starString(n = 1) :: Methodenaufruf
-------------- else
---------------- return starString( n = 0) + starString(n = 0)
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
------------------- starString(n = 0) :: Methodenaufruf
--------------------- n == 0 => return '*'
 

MoxxiManagarm

Top Contributor
ich kann mir nicht erklären, wieso am Schluss acht Sterne ausgegeben werden.
Weil du für den Einstiegspunkt n=3 keinen Stern ausgibst. An der Stelle rufst du nur kursiv 2x starString(2) auf. Das wird zu 4x starString(1) und das wiederum zu 8x starString(0). Nur bei starString(0) werden bei dir Sterne ausgegeben, daher 8 Sterne.
 
Zuletzt bearbeitet:

MoxxiManagarm

Top Contributor
Ist die Rekursion denn hier Pflicht? Falls iterativ auch möglich, kannst du 2 verschachtelte Schleifen machen.

Dein Ansatz mit den 2 rekursiven Aufrufen wird so ja nicht funktionieren egal wie du es drehst.
Beispiel n=4 >> Du willst hier 16 Sterne, aber 2x starString(3) sind bereits 2x9=18.

Du kannst dich in deinem Beispiel auf die Rekursive Formel der Folge der Quadratzahlen beziehen.
Die da wäre: a(n) = a(n-1) + (2n-1) mit entsprechendem a0/a1
Du hast also einen rekursiven Aufruf und das Appendix 2n-1 wirst du in einem Methodendurchlauf realisieren müssen.
 

looparda

Top Contributor
Dein Ansatz mit den 2 rekursiven Aufrufen wird so ja nicht funktionieren egal wie du es drehst.
Beispiel n=4 >> Du willst hier 16 Sterne, aber 2x starString(3) sind bereits 2x9=18.
Vielleicht sollten wir erstmal festhalten, dass die Funktion die Anforderung erfüllt.

Ist die Rekursion denn hier Pflicht?
Jeder hier hat bestimmt eine eigene Lösung im Kopf, die verständlicher wäre. Ich denke aber um alternative Lösungen geht es hier nicht. Sondern darum den Programmablauf zu verstehen.

Was die Methode besonders verzwickt macht, ist dass sie sich selbst zweimal in der gleichen Zeile aufruft. Selbst im Debugger ist damit schwer zu erkennen ob man von der linken oder rechten Funktion kommt.

Um das etwas verständlicher zu machen habe ich einen zweiten Parameter eingeführt, an dem man ablesen kann in welchem Zweig man gerade ist.
Java:
    private static String starString(int n, String side) {
        System.out.println(side + ": " +n);
        if (n < 0) {
            throw new IllegalArgumentException();
        } else if (n == 0) {
            return "*";
        } else {
            return starString(n - 1, "left") + starString(n - 1, "right");
        }
    }

    public static String starString(int n) {
        return starString(n, "root");
    }
Bei n=4 ist die Ausgabe:
Code:
root: 4
left: 3
left: 2
left: 1
left: 0
right: 0
right: 1
left: 0
right: 0
right: 2
left: 1
left: 0
right: 0
right: 1
left: 0
right: 0
right: 3
left: 2
left: 1
left: 0
right: 0
right: 1
left: 0
right: 0
right: 2
left: 1
left: 0
right: 0
right: 1
left: 0
right: 0
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Bitte um Hilfe muss es schnellstmöglich erledigen Java Basics - Anfänger-Themen 15
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
M Bitte um Hilfe bei 2DArrays Java Basics - Anfänger-Themen 8
D Abrechnung bitte um hilfe Java Basics - Anfänger-Themen 25
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
marcooooo einmal noch schnell hilfe bitte:/ Java Basics - Anfänger-Themen 2
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
S Bitte Hilfe zu Fehlermeldung am Handy Java Basics - Anfänger-Themen 2
I Do-While / Kalkulator / Bitte um Hilfe Java Basics - Anfänger-Themen 9
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
F (Eclipse) Beim importieren etwas fehlerhaft bitte um Hilfe :) Java Basics - Anfänger-Themen 3
T Bitte um Hilfe Java Basics - Anfänger-Themen 9
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
J Bitte Hilfe Java Basics - Anfänger-Themen 4
T Bitte um Hilfe bei Aufgabe: Long zahl = Long.parseLong(args [0]); Java Basics - Anfänger-Themen 3
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
P <identifier> expected Fehler bitte um Hilfe Java Basics - Anfänger-Themen 5
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
S Variablen Hilfe bitte Java Basics - Anfänger-Themen 6
J Ich bitte DRINGEND um Hilfe!!! Java Basics - Anfänger-Themen 16
Q Importieren meiner Boundary? Bitte Hilfe Java Basics - Anfänger-Themen 3
CyberFish initialisieren, obwohl es gemacht wurde! Bitte um Hilfe Java Basics - Anfänger-Themen 10
H Bitte um Hilfe von Profis. Java Basics - Anfänger-Themen 5
S Klassen Formel zur Berechnung .... Bitte um Hilfe Java Basics - Anfänger-Themen 7
J Probleme bei kompilieren ... Bitte um Hilfe Java Basics - Anfänger-Themen 27
P Bitte um hilfe bei einfachem Rechner Java Basics - Anfänger-Themen 7
B Bitte Hilfe für Funktionalität eines Sudokus Java Basics - Anfänger-Themen 8
G Brauche bitte Hilfe, bei umgekehrter Ausgabe!! Java Basics - Anfänger-Themen 6
U finde fehler nicht! bitte um hilfe Java Basics - Anfänger-Themen 8
M Problem: code too large - bitte um Hilfe Java Basics - Anfänger-Themen 12
B Java und Javac funktionieren nicht - bitte hilfe Java Basics - Anfänger-Themen 5
3 Bitte um Hilfe bei Lösung einer Aufgabe Java Basics - Anfänger-Themen 16
R Jave Problem... bitte um Hilfe!! Java Basics - Anfänger-Themen 6
S Java problem, bitte um hilfe! Java Basics - Anfänger-Themen 9
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
N verständniss problem bitte um hilfe Java Basics - Anfänger-Themen 3
L Brauche bitte dringend Hilfe für Klausur Java Basics - Anfänger-Themen 8
B Monat und Jahr bitte um Hilfe Java Basics - Anfänger-Themen 8
D Java Problem bitte um hilfe Java Basics - Anfänger-Themen 4
S BITTE UM HILFE: Unterschied Deklaration und Signatur einer Methode Java Basics - Anfänger-Themen 3
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
T Problem mit Aufgabe..bitte um Hilfe Java Basics - Anfänger-Themen 8
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
N Bitte um Hilfe - zyklisch Existenz einer Datei prüfen Java Basics - Anfänger-Themen 21
G ein kleines java prog - hat aber einen fehler-bitte um hilfe Java Basics - Anfänger-Themen 5
G Verstehe das nicht. bitte um hilfe Java Basics - Anfänger-Themen 13
L Bitte um Hilfe: getRuntime().exec() Java Basics - Anfänger-Themen 12
H BITTE SCHNELLE HILFE - VERZEICHNISSE DURCHGEHEN Java Basics - Anfänger-Themen 2
K Hilfe beim starten eines Programms! Bitte helfen. Java Basics - Anfänger-Themen 8
P JTable Problem ! Bitte um Hilfe ! Java Basics - Anfänger-Themen 8
G hilfe bitte gebt mir wenigstens grundwissen! :( Java Basics - Anfänger-Themen 4
E Bitte Hilfe Taschenrechner! Java Basics - Anfänger-Themen 13
P Habe da ein Problem mit Arrays! Bitte um Hilfe Java Basics - Anfänger-Themen 2
S Ausgabe funktioniert nicht! Bitte um Hilfe! Java Basics - Anfänger-Themen 16
S Buffer - charArray bitte um Hilfe! Java Basics - Anfänger-Themen 4
D Java Aufgabe fürs Studium (bitte um Hilfe) Java Basics - Anfänger-Themen 8
C Compiler-Fehler - bitte um Hilfe Java Basics - Anfänger-Themen 20
C Bitte Hilfe bei Übung zu Verzweigungen Java Basics - Anfänger-Themen 16
E Bitte um Hilfe! Zugriff auf "veränderte" Variablen Java Basics - Anfänger-Themen 2
ineedhelpinjava OOP Bitte wichtig Java Basics - Anfänger-Themen 6
G Bitte meinen Account löschen Java Basics - Anfänger-Themen 1
Vivien Bitte um Optimierungsvorschläge / Verbesserungsvorschläge / allgemeines Feedback Java Basics - Anfänger-Themen 8
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
P Bitte Hinweise zu folgendem "Klassenproblem" Java Basics - Anfänger-Themen 3
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
P Erste Schritte Bitte ein paar Erklärungen zu meinem Code Java Basics - Anfänger-Themen 6
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
J Bitte um Erklärung Java Basics - Anfänger-Themen 4
A GUI- Allgemeines Problem (Bitte helfen) Java Basics - Anfänger-Themen 15
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
F Bitte mal Zusammenhänge der Klassen erklären Java Basics - Anfänger-Themen 8
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
O Rundungsfehler bitte erklären! Java Basics - Anfänger-Themen 4
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
N While Schleife Erklärung Bitte Java Basics - Anfänger-Themen 3
Z Erste Schritte Bitte helft mir dringend!! Java Basics - Anfänger-Themen 3
T Unit tests fehlerhaft bitte um hiiiiilfe :D Java Basics - Anfänger-Themen 1
T Eine kurze frage vor der prüfung bitte. Java Basics - Anfänger-Themen 5
H Methoden Bitte um Erklärung der askString-Methode Java Basics - Anfänger-Themen 15
O Erste Schritte Aller Anfang ist schwer ! Bitte um Unterstützung Java Basics - Anfänger-Themen 6
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
G Input/Output FilenameFilter aber bitte keine Unterordner Java Basics - Anfänger-Themen 5
J Vererbung Anfänger Programm bitte um Kritik&Anregungen Java Basics - Anfänger-Themen 21
N Bitte Java Basics - Anfänger-Themen 2
D ???:L Bitte einmal mit drüber nachdenken Java Basics - Anfänger-Themen 5
eLogic DownloadManager - Bitte helft mir Java Basics - Anfänger-Themen 7
R Vererbung Bitte um Erklärung - Instanzvariablen Java Basics - Anfänger-Themen 8
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
P Bitte helft mir Java Basics - Anfänger-Themen 3
M Aus CSV-Datei lesen und anzeigen (bitte schnell um Antwort) Java Basics - Anfänger-Themen 6
C Bitte kurzes Feedback - JavaVersionen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben