Rekursive Methoden

Luca H

Mitglied
Hallo, ich hätte eine Frage.
Und zwar sollen wir eine Rekursive Methode schreiben, in der wir ein Integer Array und einen Integerwert n bekommen. Nun sollen wir überprüfen, ob dieser Wert im Array vorkommt, wenn ja soll nur dann true zurückgegeben werden, wenn die Anzahl der vorkommenden Werte n gerade ist. Falls ungerade dann false. Nun habe ich das Problem, dass ich versuche, jeden Index mit n zu vergleichen und wenn dieser gleich ist einen counter zählen lasse.

Nun zum Problem: Wenn ich am ende die Methode rekursiv aufrufe initialisiert er mein index i wieder auf 0.

Code folgt
 
Zuletzt bearbeitet:

Luca H

Mitglied
Java:
public class Functionality {
    
    public static void main(String[] args) {
        evenNumberOf(2, new int[] {1,2,3,2});
        
    }
    
    public static boolean evenNumberOf(int n, int[] a) {
        int i = 0 ;
        int counter = 0;
        if(a == null || a.length == 0) {
            return false;
        } else {
            if(a[i] == a.length -1 ) {
                if(counter % 2 == 0) {
                    System.out.println("true");
                    return true;
                    
                } else System.out.println("false");
                    return false;
                
            } else {
            if(a[i] == n) {
                counter++;
                i++;
                return evenNumberOf(n,a) ;
            } else {
                i++;
                return evenNumberOf(n,a) ;
            }
            
                
            
            }
        }
 

mihe7

Top Contributor
Wenn Du die Signatur der Methode nicht ändern darfst, funktioniert das so natürlich nicht. Da musst Du Dir was anderes überlegen.

Tipp:
Ein Array [a,b,c,d] kann man als Element a und ein Array [b,c,d] betrachten.
 

httpdigest

Top Contributor
Kannst du einmal die genaue (literally) Aufgabenstellung schicken? Vielleicht darfst du ja auch eine Hilfsmethode schreiben, die die eigentliche rekursive Methode ist.
 

Luca H

Mitglied
Das wäre die Aufgabe:

Implementieren Sie eine statische-public Methode mit dem Namen
"evenNumberOf" in der Klasse "Functionality". Die Methode bekommt als
Eingabeparameter einen Integer-Wert n und ein Integer-Array und gibt einen
Boolean zurück.

evenNumberOf soll rekursiv (!) feststellen, ob im Array die Anzahl des Wertes
n gerade ist. Wenn ja, soll true zurueckgegeben werden, ansonsten false. Wenn
das eingegebene Array null ist oder die Laenge 0 hat, soll ebenso false
zurueckgegeben werden.

Beispiel: evenNumberOf(2, new int[] {1,2,3,2}) ---> true

evenNumberOf(1, new int[] {1,2,3,2}) ---> false

Hinweis: Loesen Sie das Problem nicht iterativ, d.h. verwenden Sie keine
Schleifen! Die Tests testen nicht auf rekursive Implementation, sondern nur
die korrekten Rueckgaben Ihrer Methode.
 

iamcytrox

Neues Mitglied
Anregungen wie man das Problem lösen kann. Ich habe zwar nicht genau das gleiche Problem, allerdings ein ähnliches und ich bin auf der Suche nach Lösungsansätzen. Da der Topic noch recht aktuell ist, hatte ich gehofft, dass jemand einen Ansatz hat. Durchgekautes möchte ich natürlich nicht, ich möchte es selbst lernen. Allerdings bin ich hier maßlos überfordert 😀
 

fhoffmann

Top Contributor
Wenn die erste Zahl im Array mit der gesuchten Zahl übereinstimmt, gib zurück, ob die gesuchte Zahl im Rest des Arrays ungerade oft vorkommt (nicht gerade oft vorkommt),
ansonsten gib zurück, ob die gesuchte Zahl im Rest des Arrays gerade oft vokommt.
 

httpdigest

Top Contributor
Ich denke, ein "key insight" hier ist, dass man eine Hilfsmethode braucht, die selbst rekursiv ist, denn man kann mit der Signatur der vorgegebenen Methode nicht die drei unterschiedlichen nötigen Zustände "kein Match", "ungerader Match", "gerader Match" abbilden.
 

kneitzel

Top Contributor
Ich denke, ein "key insight" hier ist, dass man eine Hilfsmethode braucht, die selbst rekursiv ist, denn man kann mit der Signatur der vorgegebenen Methode nicht die drei unterschiedlichen nötigen Zustände "kein Match", "ungerader Match", "gerader Match" abbilden.
Das ist doch so nicht vorgegeben. Das "kein Match" gibt es nicht. Kein match wäre 0 und gerade. Die Sonderbehandlung ist ja nur: Array null oder Länge 0:
Wenn
das eingegebene Array null ist oder die Laenge 0 hat, soll ebenso false
zurueckgegeben werden.
Damit hat man eine Prüfung, die zwar nur beim ersten Aufruf interessant ist, aber problemlos jedes Mal laufen kann.
Rekursion-Abbruch muss halt sein, wenn das Array Größe 1 hat.
Und sonst ist es halt ein Vergleich des Elements an 0 + Rekursiver Aufruf Rest. (Was man natürlich richtig zusammen packen muss - das habe ich jetzt mal absichtlich nicht vorgegeben)

Die Hilfsroutine würde ich aber dennoch machen um dann halt noch den Parameter aktuellerIndex mitzugeben. Damit vermeidet man das viele Array kopieren.
 

httpdigest

Top Contributor
Das ist doch so nicht vorgegeben. Das "kein Match" gibt es nicht. Kein match wäre 0 und gerade. Die Sonderbehandlung ist ja nur: Array null oder Länge 0:
Und wie willst du dann folgende oben genannte Anforderung lösen?

Wenn
das eingegebene Array null ist oder die Laenge 0 hat, soll ebenso false
zurueckgegeben werden."
Du weißt ja nicht, ob das nun aus einem rekursiven Fall eingetreten ist, oder im ersten Aufruf.
Denn wenn du rekursiv abgestiegen bist bis zum Fall, wo dein Restarray noch eine Lange von 0 hat, dann kannst du vorher ja schon Elemente gefunden haben oder auch nicht.
 

kneitzel

Top Contributor
Du weißt ja nicht, ob das nun aus einem rekursiven Fall eingetreten ist, oder im ersten Aufruf.
Wenn Du nur bis zu einem Element runter gehst, dann hast Du den Fall ja nicht. Das kann also nur beim ersten Aufruf auftreten. Die Wahl des Abbruchkriteriums kann das also lösen. Den Algorithmus hatte ich auch schon skizziert (weiss den Thread aber nicht mehr und bin zu faul zu suchen):

1. Array null oder array length 0? -> Ende mit Return-Wert Sonderbehandlung -> Nicht Teil der eigentlichen Rekursion
2. Array length 1? Rückgabe ob der Wert nicht gleich dem zu prüfenden Wert ist.
3. Wenn erster Wert == gesuchter Zahl: return !rekursiverAufruf für RestArray
Sonst return rekursiverAufruf für Restarray

(Den Punkt 3 kann man auch zusammen fassen ohne if mit nur einem logischen Ausdruck - aber so ist es leichter verständlich. Und die eigentliche Rekursion ist 2 und 3, da 1 sozusagen nur die Validierung ist, die eigentlich nur einmal stattfinden muss und die aber beliebig oft kommen kann.)

Edit: Return Wert bei 2 war falsch. true heisst ja "gerade" Anzahl, daher Prüfung auf "nicht gleich" und nicht auf gleich.
 

kneitzel

Top Contributor
Was mir im ersten Thread zu diesem Thema, bei dem ich bei dem Lösungsansatz Hilfen gegeben habe, wichtig war:
Ich sehe das zweigeteilt:
a) Wir haben ganz klar die Rekursion. Die muss man einmal schreiben.
b) Wir haben eine Sonderbehandlung. Die kommt als zweiten Schritt dazu.

"Nicht zuviel auf einmal machen und sich dabei verzetteln!" war die Aussage, die ich rüber bringen wollte. Gerade am Anfang neigt man halt genau zu sowas. Direkt in Java etwas programmieren wollen - Stift und Zettel sind aber normale Hilfsmittel. (Klar, die Komplexität steigt, aber die Whiteboards sind in Entwicklerteams extrem wichtige Tools und erfüllen genau die Funktion. Abläufe / Algorithmen werden schnell skizziert und ggf. besprochen.)

Mit der Zeit kommt mehr Erfahrung, aber genau dieser Ansatz wird dann ggf. auch wieder forciert (z.B. bei TDD). Aber auch in der Agilen Darstellung könnten das schon fast 2 User Stories sein (Ok, etwas das ist wohl doch etwas übertrieben :) ).

Es läuft halt immer alles sehr stark auf das "Teile und Herrsche" hinaus. Das, was Uncle Bob als Grundlage des Agilen Arbeitens ausgedrückt hat. Viele einfache, kurz und schnell zu erledigenden Dinge machen. (Ist jetzt so aus dem Kopf heraus nur sinngemäß ... habe ich leider nicht genauer im Kopf.)

Das nur etwas zu den Hintergründen bei dieser Unterstützung. Ist hoffentlich nicht zu verwirrend.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
K Rekursive Methoden Java Basics - Anfänger-Themen 15
S rekursive methoden Java Basics - Anfänger-Themen 5
schredder Rekursive Quadratzahlen - Ergebnisprozedur Java Basics - Anfänger-Themen 1
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
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
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
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
M 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
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
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
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 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
D rekursive ausgabe einer zahl Java Basics - Anfänger-Themen 14
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
M Rekursive Binärsuche Java Basics - Anfänger-Themen 6
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben