Rekursive Algorithmen

Guten Tag zusammen,

im Rahmen der Schule beschäftigen wir uns aktuell mit der Rekursion. Nur müssen wir uns den Stoff wegen Krankheitsfalls des Lehrers selbst aneignen, sodass das Thema mir nicht so verständlich ist.

Die Aufgaben 5 und 6 sind zu erledigen.
Meine Überlegungen:

A5:

erstmal allgemein: der Unterschied zwischen rekursiv und iterativ besteht darin, dass iterative Methoden eine Schleife verwenden, während rekursive eine if-else-Struktur. Der Rekursionsanker ist die Abbruchbedingung und der Rekursionsschritt beschäftigt sich damit, das größere ganze Probleme in kleinere untere aufzulösen.

Eine kleine Frage aber noch: Die 1 auf dem Pfeil bei den Tabellen ist doch die Kardinalität, die in diesem Zusammenhang angibt, wie häufig der Würfel vorhanden ist - also ein Würfel pro Spiel, oder? Dürfte aber für die Aufgabe sowieso unwichtig ist.

Mein vorläufiges Programm schaut folgendermaßen aus:

Java:
public class Wuerfelspiel {
 
  // Es wird ein Array der übergebenen Laenge mit Zufallszahlen zwischen 0 und 6 befüllt und zurückgegeben.
  public static int[] fuellen(int laenge){
    int[] zufallsArray = new int[laenge];
    for (int i=0; i<laenge; i++) {
      zufallsArray[i]=(int)(Math.random()*7);
    }
    return zufallsArray;
  }

  // Die Eintraege werden addiert
  public static void addieren(int[] feld){
    
  }
  
  public static void main(String[] args) {
    
  }
}


Wie man vielleicht erkennen kann, konnte ich bisher nur Zufallszahlen generieren lassen.
Um zumindest einen Lösungsansatz zu haben und eine Strategie die darauffolgenden Aufgaben zu lösen, frage ich mich nun: Wie kann ich die Ergebnisse der Zufallszahlen addieren und ausgeben?

Ich bedanke mich im Voraus und wünsche noch einen angenehmen Abend.

Mit freundlichen Grüßen

Viktor A. Kaiser
 

Anhänge

  • 100-123-Rekursive-Methoden (1).pdf
    250,5 KB · Aufrufe: 4

osion

Bekanntes Mitglied
Um die Ergebnisse der Zufallszahlen in einem Array zu addieren und das Ergebnis auszugeben, könntest du folgenden Ansatz verwenden:
  1. Erstelle eine Variable summe, die den Anfangswert 0 hat. Diese Variable wird später dazu verwendet, die Summe der Zufallszahlen zu speichern.
  2. Iteriere über das Array mit den Zufallszahlen und füge jeden Wert der Variable summe hinzu. Dies könntest du mit einer for-Schleife erreichen.
  3. Nachdem du alle Werte des Arrays aufsummiert hast, gib das Ergebnis der Summe mit System.out.println(summe) aus.
Hier ist ein Beispiel, wie die Methode addieren in deinem Programm aussehen könnte:

Java:
public static void addieren(int[] feld) { 
int summe = 0; for (int i = 0;
 i < feld.length; i++) { summe += feld[i]; 
} 
System.out.println(summe); }
Ich hoffe, das hilft dir weiter! Falls du weitere Fragen zu der Aufgabe hast oder etwas unklar ist, lass es mich gerne wissen.
 
Guten Abend,

vielen Dank, für die Mithilfe.
In Zeiten von Klausurenstress stelle ich mich aktuell bisschen doof an: Warum möchte Java das Programm nicht ausführen?

Java:
public class Wuerfelspiel {
 
  // Es wird ein Array der übergebenen Laenge mit Zufallszahlen zwischen 0 und 6 befüllt und zurückgegeben.
  public static int[] fuellen(int laenge){
    int[] zufallsArray = new int[laenge];
    for (int i=0; i<laenge; i++) {
      zufallsArray[i]=(int)(Math.random()*7);
    }
    return zufallsArray;
  }

  // Die Eintraege werden addiert
  public static void addieren(int[] feld) {
  int summe = 0;
  for (int i = 0; i < feld.length; i++)
      { summe += feld[i];
      }
  System.out.println(summe); }
 
  public static void main(String[] args) {
 
         fuellen(laenge);
         addieren(feld);
  }
}
 

osion

Bekanntes Mitglied
Guten Abend,

vielen Dank, für die Mithilfe.
In Zeiten von Klausurenstress stelle ich mich aktuell bisschen doof an: Warum möchte Java das Programm nicht ausführen?

Java:
public class Wuerfelspiel {
 
  // Es wird ein Array der übergebenen Laenge mit Zufallszahlen zwischen 0 und 6 befüllt und zurückgegeben.
  public static int[] fuellen(int laenge){
    int[] zufallsArray = new int[laenge];
    for (int i=0; i<laenge; i++) {
      zufallsArray[i]=(int)(Math.random()*7);
    }
    return zufallsArray;
  }

  // Die Eintraege werden addiert
  public static void addieren(int[] feld) {
  int summe = 0;
  for (int i = 0; i < feld.length; i++)
      { summe += feld[i];
      }
  System.out.println(summe); }
 
  public static void main(String[] args) {
 
         fuellen(laenge);
         addieren(feld);
  }
}
Es gibt ein paar Probleme auf den ersten Blick:
  1. In der main-Methode wird die Methode fuellen aufgerufen, aber es wird keine Variable "laenge" übergeben. Stattdessen müsste man eine gültige Zahl übergeben, z.B. "fuellen(5);", um ein Array von 5 Zufallszahlen zu erhalten.
  2. In der main-Methode wird die Methode addieren aufgerufen, aber es wird keine Variable "feld" übergeben. Stattdessen müsste man das Array übergeben, das von der Methode fuellen zurückgegeben wurde. Zum Beispiel: "addieren(fuellen(5));"
 
Das habe ich nun umgesetzt und es kam die Zahl 15 raus - ist natürlich von den Zufallszahlen abhängig.
Allerdings erfolgte jeder Neustart so, dass das vorherige Ergebnis um 1 erhöht wurde, d.h. beim zweiten Start hieß es 16, dann 17, usw.

Es ist zwar nicht die Aufgabe, aber mit dem Programm wird nun ja quasi vorgeschrieben, wie viele Zahlen miteinander addiert werden.
Es ist sicherlich möglich, dem Benutzer die Möglichkeit offen zu stellen, wie viele Zahlen zufällig verrechnet werden sollen, oder?

Außerdem wäre es interessant zu wissen, welche Zufallszahlen miteinander überhaupt gerechnet werden.

Ich würde mir diesbezüglich bis morgen mal Gedanken machen
und mein Ergebnis dann hier liefern.

Ich würde mich darüber freuen, wenn Du mich morgen Abend nochmal unterstützen könntest.
 

KonradN

Super-Moderator
Mitarbeiter
iterative Methoden eine Schleife verwenden, während rekursive eine if-else-Struktur.
Also die Unterscheidung ist so nicht ganz richtig. Klar, es gibt auch ein if Statement aber das zeichnet eine Rekursion nicht aus.

Eine Rekursion zeichnet sich dadurch aus, dass diese sich selbst aufruft.

Dann stimmt Dein Code natürlich nicht. Es ist ein Klassendiagramm gegeben und dieses schreibt ja schon zwei Klassen vor: Spiel und Wuerfel.
Und diese haben bereits Details im Diagramm vorgegeben. Das sollte man also so auch als erstes umsetzen um dann die Basis für weitere Aufgaben zu haben. Ohne diese Grundlage kannst Du die Aufgabe nicht richtig bearbeiten, denn da steht ja ganz deutlich: "Die Klasse Spiel soll über weitere Methoden ....."

Und dann hast Du natürlich auch die Aufgabe selbst nicht genau gelesen. Da wird z.B. eine Methode int addiereX(int x) gefordert. Bei deinem void addieren(int[] feld) stimmt also weder der Typ für die Rückgabe noch für den Parameter.
 
Also die Unterscheidung ist so nicht ganz richtig. Klar, es gibt auch ein if Statement aber das zeichnet eine Rekursion nicht aus.

Eine Rekursion zeichnet sich dadurch aus, dass diese sich selbst aufruft.

Dann stimmt Dein Code natürlich nicht. Es ist ein Klassendiagramm gegeben und dieses schreibt ja schon zwei Klassen vor: Spiel und Wuerfel.
Und diese haben bereits Details im Diagramm vorgegeben. Das sollte man also so auch als erstes umsetzen um dann die Basis für weitere Aufgaben zu haben. Ohne diese Grundlage kannst Du die Aufgabe nicht richtig bearbeiten, denn da steht ja ganz deutlich: "Die Klasse Spiel soll über weitere Methoden ....."

Und dann hast Du natürlich auch die Aufgabe selbst nicht genau gelesen. Da wird z.B. eine Methode int addiereX(int x) gefordert. Bei deinem void addieren(int[] feld) stimmt also weder der Typ für die Rückgabe noch für den Parameter.
Vielen Dank, für die Rückmeldung!
Da hast Du natürlich Recht. Im Zuge der aktuell vielen Schularbeit scheine ich mich daran nicht mehr orientiert zu haben.

Dass aber der Inhalt in der Klammer von int addiereX bestimmt, ob ein Rückgabewert erfordert wird oder nicht war mir tatsächlich nicht bewusst.
Da werde ich mich am besten in den Ferien nochmal in Ruhe dransetzen und das dann ordentlich abfertigen.
Aber vielleicht war ich von der Aufgabenstellung auch erstmal überwältigt, da wir dies in einem solchen Umfang noch nicht hatten.

Ich melde mich in den Ferien einfach nochmal und präsentiere dann meine Ergebnisse mit wahrscheinlich auftretenden Fragen.
 

httpdigest

Top Contributor
Dass aber der Inhalt in der Klammer von int addiereX bestimmt, ob ein Rückgabewert erfordert wird oder nicht war mir tatsächlich nicht bewusst.
Das ist auch eine falsche Schlussfolgerung. Die Parameter einer Methode (der Inhalt in der Klammer) bestimmen nicht über den Rückgabe_typ_ einer Methode.
Du hast dich einfach nur nicht an die in der Aufgabe geforderte Signatur der Methode gehalten. Die Aufgabe verlangt:
1671558320470.png
Also: int als Rückgabetyp und int als Typ des einzigen Parameters (das in den Klammer).

Kurz gesagt: Deine Methodensignatur void addieren(int[] feld) entspricht weder vom Rückgabetyp, noch vom Namen, noch vom Parametertyp der geforderten Methode int addiereX(int x).
 
Vielleicht hatte ich mich auch nicht ganz verständlich ausgedrückt.
Ich wollte erstmal nur ein grobes Konstrukt entwerfen, das die Zufallszahlen miteinander addiert. Danach hätte ich mich selbstverständlich an der Aufgabenstellung wieder orientiert gehabt.

Aber dies hatte auch bereits Dein Vorredner freundlicherweise herausgearbeitet.
Trotzdem auch Dir noch ein Dankeschön, für das Hinweisen.
 

mihe7

Top Contributor
Die 1 auf dem Pfeil bei den Tabellen ist doch die Kardinalität, die in diesem Zusammenhang angibt, wie häufig der Würfel vorhanden ist - also ein Würfel pro Spiel, oder? Dürfte aber für die Aufgabe sowieso unwichtig ist.
Ja. Eine durchgezogene Linie, die Klassen miteinander verbindet, stellt eine Beziehung zwischen diesen Klassen dar. Linienenden können die Beziehung weiter typisieren (hier handelt es sich um eine Assoziation). Die Multiplizität gibt an, auf welcher Seite wie viele Instanzen an dieser Beziehung partizipieren. Offene Pfeile geben an, welches Ende (bzw. welche Enden) dieser Beziehung angesteuert werden kann (bzw. können).

UML-Diagramme erheben nicht den Anspruch auf Vollständigkeit, d. h. über etwas, das im Diagramm nicht dargestellt ist, wird in der Regel schlicht keine Aussage getroffen (das kann natürlich per Konvention eingeschränkt werden). So ist auf der Spiel-Seite keine Multiplizität angegeben, d. h. die Frage, ob beispielsweise ein und derselbe Würfel in mehreren Spielen verwendet werden kann, lässt das Diagramm unbeantwortet.

Im gezeigten Diagramm sieht mal also eine Assoziationsbeziehung zwischen Spiel und Wuerfel, an der eine Instanz von Wuerfel partizipiert. Diese Beziehung ist von Spiel aus in Richtung Wuerfel navigierbar. Nicht besondes günstig eingezeichnet ist die Rolle "wuerfel" mit privater Sichtbarkeit auf Seiten der Klasse Wuerfel.

Ob das für die Aufgabe wichtig ist, hängt davon ab, was von Dir erwartet wird. Wenn Du Spiel und Wuerfel implementieren musst, dann wird die Erwartung sein, dass Du einfach eine private Instanzvariable wuerfel vom Typ Wuerfel hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Rekursive Methode Java Basics - Anfänger-Themen 13
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
S Rekursive Kombinationen Java Basics - Anfänger-Themen 6
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
schredder Rekursive Quadratzahlen - Ergebnisprozedur Java Basics - Anfänger-Themen 1
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
L Rekursive Methoden Java Basics - Anfänger-Themen 14
C Rekursive Methode in Interative Methode umwandeln Java Basics - Anfänger-Themen 17
G Rekursive Methode mit 2 Aufrufen Java Basics - Anfänger-Themen 1
J Rekursive Folge (a=a-1) Java Basics - Anfänger-Themen 9
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
D Rekursive Methode Java Basics - Anfänger-Themen 8
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
J rekursive Methode Java Basics - Anfänger-Themen 26
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
MiMa Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
S Rekursive Methode Java Basics - Anfänger-Themen 8
O Rekursive Methode Java Basics - Anfänger-Themen 4
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
K Rekursive Methode Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
B Datentypen Suchbaum - Rekursive Ausgabe Java Basics - Anfänger-Themen 1
P Methoden Rekursive Methode für Potenzen Java Basics - Anfänger-Themen 2
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
S Eine rekursive Lösung Java Basics - Anfänger-Themen 4
S Int zu Hexadezimal - Rekursive Methode Java Basics - Anfänger-Themen 2
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
shiroX OOP Rekursive und Iterative Definition Java Basics - Anfänger-Themen 2
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
S Methoden rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
E Rekursive Methode Java Basics - Anfänger-Themen 3
N Methoden Rekursive Fibonaccizahlen mit Array Java Basics - Anfänger-Themen 2
R Rekursive Ausgabe eines Binärbaums Java Basics - Anfänger-Themen 4
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
A Rekursive Methode in Iterative umwandeln Java Basics - Anfänger-Themen 6
S Labyrith Rekursive Wegsuche Java Basics - Anfänger-Themen 4
C Rekursive Methode - Ziffern in Zahl Java Basics - Anfänger-Themen 33
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
G Rekursive Methode Java Basics - Anfänger-Themen 3
A rekursive Listen in Java? Java Basics - Anfänger-Themen 5
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
E Rekursive Methode mit Zufallsarray Java Basics - Anfänger-Themen 6
E Rekursive Methode Java Basics - Anfänger-Themen 18
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
M Rekursive Methode - wo ist der Fehler? Java Basics - Anfänger-Themen 4
J rekursive methode Java Basics - Anfänger-Themen 6
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
J Rekursive Methode Java Basics - Anfänger-Themen 11
G Rekursive Methode Java Basics - Anfänger-Themen 5
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
K Rekursive Methoden Java Basics - Anfänger-Themen 15
K Rekursive Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
D rekursive Summenberechnung Java Basics - Anfänger-Themen 8
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
kulturfenster rekursive Binaere Suche Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
B Rekursive & schreiben im ArrayList Java Basics - Anfänger-Themen 2
J Rekursive Fkt. Java Basics - Anfänger-Themen 2
A Rekursive Dateisuche Java Basics - Anfänger-Themen 12
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
G rekursive Methode Java Basics - Anfänger-Themen 3
N rekursive Beispiele Java Basics - Anfänger-Themen 3
G rekursive u iterative Methode Java Basics - Anfänger-Themen 8
G Rekursive Methode Java Basics - Anfänger-Themen 7
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben