# Rekursion-Binär



## schlelia (19. Nov 2021)

Hallo,
ich habe gerade einen (teilweise) fertigen Rekursionscode geschrieben. Er erzeugt sogenannte Gray Codes:

```
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 (19. Nov 2021)

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".


----------



## schlelia (19. Nov 2021)

mihe7 hat gesagt.:


> 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".


Ja fast. Nur das der Basisfall eben "0","1" ist


----------



## mihe7 (19. Nov 2021)

Gut, dann verstehe ich nicht, wo das Problem liegt und was Du da groß rumrechnest


----------



## schlelia (19. Nov 2021)

mihe7 hat gesagt.:


> Gut, dann verstehe ich nicht, wo das Problem liegt und was Du da groß rumrechnest


Ja das war eig eher ein Syntax Problem, aber ich glaube ich habs geschafft


----------

