Rekursion-Binär

schlelia

Aktives Mitglied
Hallo,
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));
        }

    }

}
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
 

mihe7

Top Contributor
Sehe ich hier was falsch, oder sind die Graycodes mit einer Wortlänge x nicht einfach die Graycodes mit einer Wortlänge x-1, denen einmal eine 0 und einmal eine 1 vorangestellt wird? Der Basisfall wäre für x == 2 gegeben: "00", "01", "10", "11".
 

Neue Themen


Oben