Frage zur Rekursion

Nullquadrat

Mitglied
Hallo zusammen,

ich sitze gerade daran, eine Methode zu erstellen, die Dezimalzahlen in Binärdarstellung umrechnet. Iterativ ist es auch ziemlich simpel, doch rekursiv klappt es ganz und gar nicht.

Wie soll der PC beim rekursiven Aufruf die Zahlen 0 und 1 hintereinander schreiben ? Er rechnet mir es zusammen bei der Übergabe :

return binaer((dezZahl/10)+1); // bzw + 0

Das ganze im String zu realisieren ist doch Quatsch oder?!

Ich benutze keine vordef. Klassen oder ähnliches.

Für Hilfe wäre ich sehr dankbar.
 
Hallo,

wie willst du es denn sonst machen, wenn nicht mit einem String?
Wie hast du es denn iterativ gelöst?

MFG

Sascha
 
Hier habe ich es einfach mit einer Liste gelöst:

public void umrechnen (int a){

int x;
List s = new List();
while (a >0){
x =a/2;
if(x*2 == a)
s.insertBefore(0);
else
s.insertBefore(1);
a=a/2;
}
s.processListnodes();
}


Beim String bekomme ich doch aber das Problem, dass die Dezimalzahl nicht übergeben werden kann.
 
Was ist denn das für eine Liste?
Du kannst ja auch mehrere Übergabeparameter haben. Dann könntest du es beispielsweise mit einem String lösen.
Das ist ja sicherlich eine Übung. Was ist denn genau die Aufgabe?

MFG

Sascha
 
mach halt einfach die Liste auch zum Übergabeparameter

Java:
public static List toBinary(List liste, int number) {
    if(number > 0)
    // Zahl verarbeiten und an Liste ranhängen
    else return liste;

    return toBinary(liste, kleinereNumber);
}
 
Ja richtig, es ist eine Übung. Die Aufgabe lautete, eine Methode zu erstellen, die, die übergebene Dezimalzahl in Binärzahl umwandelt. Das ganze ebend iterativ und rekursiv.
Ich habe dies dann halt mit dieser Liste gelöst.
Die Liste ist eine einfachverkettete Liste, die importiert ist.

Du meinst so?:

public String umwand(String s,int a){
...
return s;
}
 
Gut, also irgendwie bin ich jetzt verwirrt.
Meinste du so?
Code:
 public List umwand(List s,int b){
   if (b>0){
   if (b/2 * b ==b){
     s.insertBefore(0);
     return umwand(s,b/10);
     }
   else {
     s.insertBefore(1);
     return umwand(s,b/10);
   }
   }
   return s;
 }

Das ist aber irgendwie keine schöne Rekursion, oder?!
 
Wozu eine Liste? Das ist doch beinah ein Einzeiler:

Java:
public String toBinary(Integer integer, StringBuilder builder) {

  if (integer == 0) {

    return builder.length() == 0 ? "0" : builder.toString();
  }

  return toBinary(integer / 2, builder.insert(0, integer % 2));
}

Aufzurufen mit:

Java:
toBinary(54, new StringBuilder());

Oder überseh ich was?

REINHAUN!

PS: Wenn ich mich nicht irre, wird (b/2 * b ==b) true für b == 2, oder? ;)
 

Neue Beiträge

Zurück