Einfache Rekursion

MasterDS

Erfahrenes Mitglied
Hallo zusammen!

Ich habe ein kleines Problem und stehe total auf dem Schlauch. Ich brauche einen rekursiven Aufruf einer Funktion der folgenden Art:

Code:
int[] Werte = {0,1,2,3};

Jetzt muss die Funktion alle Werte mit allen kombinieren sodass hinterher folgende Kombinationen entstanden sind:
0,1
0,2
0,3
1,2
1,3
2,3
0,1,2
0,1,3
0,2,3
1,2,3
0,1,2,3

Das ganze Stelle ich mir als rekursiven Aufruf einer Funktion vor. Wie gesagt: Stehe auf dem Schlauch. Natürlich ist die Anzahl der Elemente von "Werte" variabel.

Vielen Dank für eure Hilfe vorab!

Gruß
Dennis
 
Hallo,

müssen die Zahlen immer eine aufsteigende Reihenfolge haben?
Oder soll auch 3,1,0,2 etc. dabei sein?

Dann wäre das Stichwort "Permutation".
 
Hallo Turri!

Nein, die sollen nicht dabei sein. Für die 4 Elemente ist meine Auflistung oben vollständig. Also 3,2,1 oder 2,1 oder 2,1,3,0 sollen alle NICHT dabei sein.

Die Reihenfolge so wie oben wäre schon super.
 
Zwischenstand:

Aktuell habe ich mir nur drei einzelne funktionen gebastelt, die jeweils die Stufen ausgeben.

Code:
        static void stufe1(int[] A)
        {
            for (int i = 0; i < A.Length; i++)
            {
                Console.WriteLine(A[i]);
            }
        }

        static void stufe2(int[] A)
        {

            for (int i = 0; i < A.Length; i++)
            {
                int aktuelle_stelle = i;

                for (int n = aktuelle_stelle; n < A.Length; n++)
                {
                    if (i != n) 
                    Console.WriteLine(A[i] + "" + A[n]);
                }
            }
        }

        static void stufe3(int[] A)
        {

            for (int i = 0; i < A.Length; i++)
            {
                int aktuelle_stelle = i;

                for (int n = aktuelle_stelle; n < A.Length; n++)
                {

                    for (int k = n; k < A.Length; k++)
                    {
                        if (i != n && i != k && k != n)
                            Console.WriteLine(A[i] + "" + A[n] + "" + A[k]);
                    }
                }
            }
        }

Aktuell rufe ich das ganze dann so auf:
Code:
           stufe1(Eingabe);
           stufe2(Eingabe);
           stufe3(Eingabe);

Aber das muss sich doch irgendwie rekursiv lösen lassen! :mad:
Denn diese Variante wird bei zunehmender Stufe immer unübersichtlicher... :(
 
Zurück