Ich habe eine iterative Methode geschrieben wie ich eine dezimal Zahl in eine Binär Zahl umwandle.
Iterative Methoden liegen mir ziemlich gut, leider ist das bei Rekursiven nicht der Fall, kann mir jemand dabei helfen die Iterative Methode in eine Rekursive zu ändern?
Code:
public static void dezimalZuBinaer() {
int i = 5062;
int[] Bits = new int[15]; // Größe des Arrays
while (i != 0) { // Solange die Dezimalzahl nicht Null ist geht er durch die Schleife
for (int stelle = 0; stelle <= 14; stelle++) {
Bits[stelle] = i % 2; // Jede 1 oder 0 wird an einer Stelle im Array gespeichert
i = i / 2; // Ergebnis durch 2 dividieren
}
for (int x = 14; x >= 0; x--) { // For Schleife um das Array andersherum auszugeben damit die Bitfolge von
// MSB zu LSB stimmt.
System.out.print(Bits[x]); //
}
}
}
Erstmal würde ich daraus eine richtige "Funktion" im mathematischen Sinne machen.
Also sie bekommt ein int rein und gibt einen Binärstring als String zurück.
Parameter: die noch zu konvertierende (Rest)zahl
Rückgabewert: der Binärstring dieser Zahl
Rekursionsabbruchbedingung: falls Parameter == 0
Rekursionsschritte:
1. falls (Parameter%2)==0 -> merke "0"; sonst merke "1"
2. rufe Funktion rekursiv auf mit Argument (parameter/2)
3. gib als Ergebnis die Konkatenation vom rekursiven Rückgabewert + Ergebnis von Schritt 1 zurück
Iterative Methoden liegen mir ziemlich gut, leider ist das bei Rekursiven nicht der Fall, kann mir jemand dabei helfen die Iterative Methode in eine Rekursive zu ändern?
Also vorweg grundsätzlich ist die iterative Variante die bessere. Das bedeutet man versucht eher eine rekursive Variante in ein iterative Variante zu verwandeln als umgekehrt. Vorteile: Iterative: Es droht kein Stackoverflow wegen zu vieler Funktionsaufrufe. Rekursive: Komplexe Probleme lassen sich einfacher formulieren.
Aber zum üben ist das ok.
Vorher solltest Du aber Deine iterative Variante überdenken.
Du verwendest eine doppelte Schleife wo man lediglich eine Schleife benötigt.
Außerdem ein unnötiges Array von 15 Integer Werten. Also die iterative Herangehensweise ist bei Dir noch nicht so ganz ausgereift.
Hier die Lösungen für Dein Problem für positive ganze Zahlen.
Java:
publicstaticStringtoBinStr(int value){String str ="";while(value >0){
str = value %2+ str;
value /=2;}return str;}publicstaticStringtoBinStrRecursive(int value){if(value <=0)return"";returntoBinStrRecursive(value /2)+ value %2;}