Rekursion

Bitte aktiviere JavaScript!
hey Leute ich hab' hier eine ganz kleine Aufgabe,

ich hab eine Methode geschrieben die, die ungerade Ziffern aus dem übergebenen zahl entfernt,
public static int geradeZiffern(int zahl) {
return (zahl == 0
? 0
: zahl % 2 != 0
? geradeZiffern(zahl / 10)
: geradeZiffern(zahl / 10) * 10 + zahl % 10);
}


jetzt muss ich eine Methode schreiben public static boolean hatUngeradeZiffern(int zahl) die nur dann true liefert wenn alle Ziffern ungerade sind. Ohne Schleifen und if-Anweisungen.
ich weiß nicht wie ich mir jede Ziffer anschauen kann,
der anfang sieht so aus:

Code:
public static boolean ungeradeZahlen(int zahl) {  //

        return (zahl % 2 == 1)
                ? true
                : ungeradeZahlen(zahl / 10);

    }
danke im voraus :)
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Die letzte Ziffer der Zahl bekommst du immer mit zahl % 10;
Dürfen denn wirklich gar keine if-Anweisungen genutzt werden? Der ternäre Operator ( ? : ) ist ja auch nichts anderes als eine if-Abfrage
 
Wenn die Methode true zurückgeben soll, wenn die übergebene Zahl ausschließlich nur aus ungeraden Ziffern besteht, dann ist die rekursive Vorschrift doch ganz einfach: Die Zahl 'N' besteht nur aus ungeraden Ziffern, wenn die erste Ziffer ungerade ist und die Zahl 'M' ohne die erste Ziffer auch nur aus ungeraden Ziffern besteht. Zusätzlich natürlich noch mit einer Abbruchbedingung, wenn die Zahl nur aus einer Ziffer besteht.
 
Hey Leute wenn wir schon dabei sind hätte ich auch ganz kurz eine Frage . Und zwar habe ich fragen bei denen ich eine Antwort brauche . Das Prinzip von Mergesort habe ich verstanden jedoch verstehe ich nicht wofür oder für was ein mergesort Programm ein rekursion benötigt und was genau hat das mit mergesort zu tun .
 
Ich glaube nicht, dass dieser Thread als Dumping Place für alle möglichen Fragen bezüglich Rekursion gedacht war. Mach am besten einen eigenen Thread auf mit deiner spezifischen Frage.
 
Die letzte Ziffer der Zahl bekommst du immer mit zahl % 10;
Dürfen denn wirklich gar keine if-Anweisungen genutzt werden? Der ternäre Operator ( ? : ) ist ja auch nichts anderes als eine if-Abfrage
ne leider dürfen wir keine if anweisung benutzen, und wo kann ich die "%10" hinschreiben boolean verwirrt mich immer
 
Code:
  public static boolean ungeradeZahlen2(int zahl) {  //
        
        return zahl < 10
                ?zahl %2 ==1
                :zahl%10 %2 ==1 && zahl /10 %2 == 1
                ?ungeradeZahlen2(zahl/10)
                :false;
                    
        

    }
    
    so sieht mein code jetzt aus
 
Du tust noch einige Dinge doppelt, die erst in einem rekursiven Aufruf geprüft zu werden brauchen. Z.B.: wieso prüfst du, ob `zahl/10` ungerade ist? Es reicht, wenn du nur prüfst (was du ja auch tust), ob `zahl` ungerade ist.
 
Ich beschreibe die "optimale" Lösung einfach mal in Prosa:
Eine Zahl `z` besteht genau dann nur aus ungeraden Ziffern, wenn die erste Ziffer ungerade ist UND die `z` entweder nur eine Ziffer hat ODER die Zahl ohne die erste Ziffer nur aus ungeraden Ziffern besteht.
Diesen Satz kannst du 1 zu 1 runterprogrammieren.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben