Rekursion Aufgabe

Diskutiere Rekursion Aufgabe im Allgemeine Java-Themen Bereich.
P

parrot

Schreiben sie eine Methode gibGrößtesEndstück(int n), die das größte
absteigende Endstück ausgibt (keine if Anweisungen und Schleifen!).
z.B. gibGrößtesEndstück(3246765) : 765
gibGrößtesEndstück(324665) : 65
gibGrößtesEndstück(3246265) : 65
gibGrößtesEndstück(32467) : 7
gibGrößtesEndstück(8) : 8
gibGrößtesEndstück(0) : 0
 
P

parrot

Hallo, ich habe einen Anfang versucht:

Code:
 return (n >= 10)
        ? n
        : (n % 10) < (n / 10 % 10)
            ? 10 * gibGrößtesEndstück(n % 10) + (n / 10 % 10)
                    :
 
P

parrot

Hallo, ich habe einen Anfang versucht:

Code:
 return (n >= 10)
        ? n
        : (n % 10) < (n / 10 % 10)
            ? 10 * gibGrößtesEndstück(n % 10) + (n / 10 % 10)
                    :
 
J

JustNobody

Also was zeichnet denn das größte Endstück aus? Welche Eigenschaft muss das genau haben?

Und die Bedingung, kein if zu verwenden ist etwas seltsam. Der Conditional Operator ist ja streng genommen nichts anderes. Aber ok, das wird ja so vorgegeben worden sein....

Schauen wir uns Deinen Code an: Da scheint die Bedingung falsch zu sein, denn wenn n >= 10 ist, dann gibst du n zurück. Ist es kleiner als 10, dann machst Du Berechnungen, die keinen Sinn ergeben. n % 10 macht keinen Sinn bei n < 10. Also vermutlich hast Du einfach die Reihenfolge vertauscht.

Und dann fehlt da natürlich noch etwas. Du hast da ja noch einen Conditional Operator: Und da fehlt, was gemacht werden soll, wenn die zweite Bedingung nicht wahr ist.

Und die Rückgabe, wenn die zweite Bedingung richtig ist, ist so nicht korrekt. Die letzte Ziffer ist kleiner als die vorletzte Ziffer, also hast Du als Rückgabe: die letzte Ziffer + 10*Rekursiver Aufruf von den Übrigen Ziffern.

Schreib doch einfach einmal auf:
- was ist die letzte Ziffer?
- was ist die vorletzte Ziffer?
- Was ist der Rest ohne die letzte Ziffer?

Also Code von Dir leicht verbessert und mit Anmerkungen:
Java:
 return (n < 10) // Bedingung umgedreht...
        ? n  // Das ist die Rückgabe bei n < 10
        : (n % 10) < (n / 10 % 10) // Zweiter Conditional Operator ...
            ? 10 * gibGrößtesEndstück(n % 10) + (n / 10 % 10) // Das sieht nicht korrekt aus.
                    : // Hier fehlt noch etwas, vermutlich 0?
 
P

parrot

Schreib doch einfach einmal auf:
- was ist die letzte Ziffer?
- was ist die vorletzte Ziffer?
- Was ist der Rest ohne die letzte Ziffer?
Ich Nehme Zahl = 3246765
-Die letzte Ziffer : Zahl % 10 = 5
-Die vorletzte Ziffer: Zahl / 10 % 10 = 6
-Der Rest ohne die letzte Ziffer: Zahl / 10 = 324676
 
P

parrot

Zahl = 3246765
Also das Ergebnis hier ist : 765
-Um das zu bekommen hat man die Zahl / 1000 gemacht.
-Ab hier 46<7 haben wir die Zahl ausgeschnitten : Hier ist eigentlich das Problem. Ich würde hier abzählen wie viel mals von 1 Ziffer kleiner als die letzte ist + 1. Also hier 32467>6>5 (2+1=3) und dann die Zahl durch 10^3 = 1000 teilen.
 
J

JustNobody

Du hast doch den Algorithmus schon fast fertig...

Du hast Dir doch irgend was gedacht mit zahl kleine 10. Was ist, wenn die Zahl kleiner 10 ist und was ist, wenn die Zahl nicht kleiner 10 ist?
Wenn die Zahl größer 10 ist: Was vergleichst Du und was gibst Du dann ggf. zurück?

Das könntest Du formulieren, denn dann hättest Du die Basis um den Code zu verbessern.
 
J

JustNobody

Soll erstmal die letzte Ziffer mit der vorletzten Ziffer verglichen werden. Dann durchlaufen bis man den negativen Fall gefunden hat.
Sei exakter. Was bedeutet durchlaufen? Du vergleicht die letzte mit der vorletzten Ziffer und machst mit dem Ergebnis nichts? Da musst doch kommen ‚wenn das dann das sonst das‘ ...
 
P

parrot

Sei exakter. Was bedeutet durchlaufen? Du vergleicht die letzte mit der vorletzten Ziffer und machst mit dem Ergebnis nichts? Da musst doch kommen ‚wenn das dann das sonst das‘ ...
Durchlaufen bedeutet wenn die letzte Ziffer < die vorletzte Ziffer ist dann gehen wir weiter sonst gibt das größte absteigende Endstück.
 
P

parrot

return (zahl < 10)
? zahl
: (zahl / 10 % 10) < (zahl % 10) || (zahl / 10 % 10) == (zahl % 10)
? zahl % 10
: 10 * gibGrößtesEndstück(zahl / 10) + (zahl % 10);
 
Thema: 

Rekursion Aufgabe

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben