Hallo,
ich habe gerade einen (teilweise) fertigen Rekursionscode geschrieben. Er erzeugt sogenannte Gray Codes:
Die Vorgänger Methode bestimmt einfach immer einen kleineren Binärcode. Sodass ich eben in der anderen Methode immer auf den Basisfall laenge == 2 komme. Aus {"0","1"} lassen sich bebliebig lange Graycodes erschaffen. Z.B laenge == 4 dann wäre der Code {"00","01","10", "11"}. Mir ist dabei aufgefallen, dass es immer ein Prinzip gibt. Array im Basisfall spiegeln und dann eine "0" oder "1" vorne ergänzen. Ggf noch kürzen, wenn die Länge keine Zweierpotenz ist.
Mir fällt es jetzt nur schwer das alles in den Rekursionsschritt zu packen. Ich brauche ja sicherlich ein paar for Schleifen und ich muss mein Array füllen. Aber kommt das dann vor oder nach dem return? Gerade gibt der else Fall (im Falle laenge ==4) ja nur {"0","1"} zurück, obwohl er ja eigentlich {"00","01","10", "11"} zurückgeben sollte. Kann mir hier jemand helfen?
Danke
ich habe gerade einen (teilweise) fertigen Rekursionscode geschrieben. Er erzeugt sogenannte Gray Codes:
Java:
public class GrayCode {
public static int vorgaenger(int laenge) {
if (laenge % 2 == 0) {
return laenge/2;
} else {
int temp = 0;
for (int i = 0; i < laenge; i++) {
if (Math.pow(2,i) > laenge) {
temp = (int) Math.pow(2,i-1);
break;
}
}
return temp;
}
}
public static String[] generiere(int laenge) {
String[] res = new String[laenge];
if (laenge == 1) {
return new String[]{"0"};
}
if (laenge == 2) {
return new String[]{"0","1"};
} else {
return generiere(vorgaenger(laenge));
}
}
}
Mir fällt es jetzt nur schwer das alles in den Rekursionsschritt zu packen. Ich brauche ja sicherlich ein paar for Schleifen und ich muss mein Array füllen. Aber kommt das dann vor oder nach dem return? Gerade gibt der else Fall (im Falle laenge ==4) ja nur {"0","1"} zurück, obwohl er ja eigentlich {"00","01","10", "11"} zurückgeben sollte. Kann mir hier jemand helfen?
Danke