Rekursiv

IloveJava

Mitglied
Hallo hab ein kleines Problem:

Und zwar würde ich gerne eine Zahl umgekehrt ausgeben lassen, aber das mit rekursivem Aufruf und ohne while Schleife.

[JAVA=1] int rev( int z )
{
int u = 0 ;
while ( z > 0 ) {
printf( "z = %10d, u = %10d\n", z, u ) ;
u = 10 * u + z % 10 ;
z /= 10 ;
}
return u ;
}
[/code]

Soweit nicht rekursiv. Aber wie mach ichs jetzt rekursiv und am besten mit if Schleife?
 
Zuletzt bearbeitet:

IloveJava

Mitglied
if (z==0)
return u;
else

... so schonmal anfangen xD

Aber da hört der bei mir sofort auf wenn ich bei else dann noch die "Rechnung" hinschreib -.-
Schneidet quasi nur eine Zahl ab und gibt den Mist dann aus.
 
Zuletzt bearbeitet:
B

bygones

Gast
fuer eine Rekursion brauchst du zum einen eine Abbruchbedingung, die hast du schon richtig aufgeschrieben.

zum anderen brauchst du den rekursiven aufruf.

schau dir deine Methode an, die iterative arbeitet mit einem Parameter, intern aendern sich aber zwei, ergo braucht deine rek. Methode z und u als Parameter.

Dann ists einfach, der rek. Aufruf besteht aus den Aenderungen der Variablen die du schon geschrieben hast....

also das gleiche nur etwas anders ;-)
 

IloveJava

Mitglied
Das klingt alles so schön einfach bei Dir, ich schau mir gerade die rekursive Methode an aber so richtig schlau werde ich daraus nicht.

Und wenn ich es mit goto mache anstatt mit if?

Java:
   if (z==0)
   return u;
   else
   {
   printf( "z = %10d, u = %10d\n", z, u ) ;
   u = 10 * u + z % 10 ;
   z = z/10 ;

So funktioniert es ja nun nicht, da gibt der mir immer nur eine abgeschnittene Zahl aus.

Aber mit goto vielleicht?

So funktioniert es zumindest:

Java:
_1:
   if (z==0)
   return u;
   else
   {
   printf( "z = %10d, u = %10d\n", z, u ) ;
   u = 10 * u + z % 10 ;
   z = z/10 ;
   goto _1;
   }

Aber stilistisch bestimmt mies :D :D Und ist das überhaupt rekursiv? o.o
 
Zuletzt bearbeitet:

AngryDeveloper

Bekanntes Mitglied
Ne, du brauchst kein GOTO. Das hat mir Rekursion nichts zu tun.
Was dir fehlt, ist einfach noch der Rekursive Aufruf in deinem else-Zweig.
Rekursiv bedeutet, dass die Methode sich selbst aufruft.
 
B

bygones

Gast
du scheinst immer darueber nachzudenken :)

Java:
    int rek(int z, int u) {
        if (z == 0) {
            return u;
        }
        return rek(z / 10, 10 * u + z % 10);
    }

der erste aufruf waere dann zb [c]rek(2345,0)[/c]. Du kannst auch noch eine hilfsmethode dazwischen schalten, wenn dich das stoert

Java:
    int rek(int z) {
      return doRek(z, 0);
    }

    int doRek(int z, int u) {
        if (z == 0) {
            return u;
        }
        return rek(z / 10, 10 * u + z % 10);
    }

wie du siehst ist das einzige was sich aendert dass die aenderungen der variablen nun im rekursiven Aufruf stehen
 
F

Firephoenix

Gast
Du hast die Zahl 1234 und willst sie rekursiv rückwärts zusammenbauen, wie machst du das?

Als erstes kommt die 4 , allerdings willst du eine 4xxx, also musst du die 4 mit 1000 multiplizieren
Dann kommt die 3, du willst eine 3xx, also muss du die 3 mit 100 multiplizieren
Jetzt kommt die 2, du willst aber eine 2x, also musst du die 2 mit 10 multiplizieren
Jetzt kommt die 1, du willst auch eine 1, also kannst du sie mit 1 multiplizieren

Jetzt addierst du 4000+300+20+1 und hast 4321.

Wie setzt sich das ergebnis also zusammen?

Letzte Zahl * 10^(AnzahlStellen-1) + rückwärts von der restliche zahl ohne die letzte Ziffer.

Wie kommst du bei 1234 auf 4 bzw 123 auf 3 oder bei 1 auf 1?
Nehm die zahl einfach modulo 10.

Für die Anzahl der Stellen kannst du den Logarithmus zur Basis 10 benutzen, das gibt einen double und wenn du den nach int castest anstatt aufzurunden kriegst du bei der 1234 z.b. den wert 3 raus.

die restlichen stellen ohne die letzte Ziffer kriegst du bei einer Integer-Zahl auch leicht, teil sie einfach ohne typecast durch 10.

Der Rekursionsanker ist auch entsprechend leicht. Beim letzten mal rufst du die Funktion mit 1/10 auf, kriegst also eine 0 als aufrufparameter. Wenn du jetzt einfach 0 zurückgibst wird am eine eine 0 addiert und du hast auch den Abbruch geschafft.

Jetzt aus dem ganzen eine schöne Funktion machen und du kannst nur mit arithmetischen Mitteln rekursiv eine Zahl umdrehen.

Gruß
 

IloveJava

Mitglied
Okay jetzt hab ich nur ein(e) Problem / Frage:

Ist u dann erstmal sofort 0?
Und wenn ich eine Zahl eingebe ist es ja nur eine Zahl und nicht zwei Zahlen.
Wenn ich dann auf einmal zwei Zahlen in der Funktion hab dann wird der Compiler böse?!

error: too few arguments to function 'rev'|

Weil ich les ja nur eine Zahl ein die umgedreht werden soll. Oder denk ich gerade falsch? o.o


Ahhhh okay hat sich erledigt, ich kann sie ja daaaann einfach 0 setzen :D Logisch xD
 
F

Firephoenix

Gast
du kannst das ja so angehen:
pseudocode
Java:
public int rev(int value){
if(Ankerbedingung){
return ...; //Rekursionsanker
}
letztestelle von value * 10^(anzahlstellen-1) + rev(rest von value);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6
J Suchbaumeigenschaft rekursiv programmieren Java Basics - Anfänger-Themen 3
T Rekursiv Vokale zählen Java Basics - Anfänger-Themen 19
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sudoku rekursiv lösen Java Basics - Anfänger-Themen 10
S Stringlänge Rekursiv ermitteln Java Basics - Anfänger-Themen 2
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
0 a hoch b rekursiv - wie stoppen? Java Basics - Anfänger-Themen 3
T Ordnerstrucktur rekursiv auslesen Java Basics - Anfänger-Themen 9
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
P Permutationen einer Tour rekursiv Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
L Kombinationen einer Menge rekursiv berechnen Java Basics - Anfänger-Themen 11
J BinBaum rekursiv ausgeben Java Basics - Anfänger-Themen 9
W Rekursiv Zeichen einfügen Java Basics - Anfänger-Themen 6
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6
G Array rekursiv teilen und aufsummieren Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben