n-fach geschchtelte For-Schleifen bei unbkanntem n
-
Hallo,
ich hab irgendwie ein Brett vor dem Kopf und bastle mittlerweile an einer Rekursion, um das Problem zu lösen...Ich muss mehrere for-Schleifen in einander schachteln, wobei die Anzahl der Schachtelung erst zum Programmstart festliegt.
for(int i1=0; i1<anzahl_kombinationen_pro_dimension; i1++) { for(int i2=0; i2<anzahl_kombinationen_pro_dimension; i2++) { for(int i3=0; i3<anzahl_kombinationen_pro_dimension; i3++) { //... for(int iN=0; iN<anzahl_kombinationen_pro_dimension; iN++) { //...tu etwas } } } }Wenn ich nicht weiss, ob es nun 2 oder 3 oder wie viele Schleifen auch immer werden, wie realisiere ich die Kombination aller Möglichkeiten?
Danke.
-
Rekursion
-
Wie sieht denn diese "Tu etwas" aus?
Wenn du dort nicht unzählige Variablen erstellt, würde ich dir hierbei schon zu ner rekursiven Lösung raten, da diese in diesem Fall auch um einiges kürzer und eleganter aussehen sollte...MfG
HundefutterEdit: Doch noch einer schneller....

-
bei gleicher anzahl kombinationen pro dimension kann man folgendes machen:
#include <iostream> unsigned int powi(unsigned int base, unsigned int exponent) { unsigned int result; for(result = 1; exponent > 0; --exponent) result *= base; return result; } int main() { for(unsigned int i = 0; i < 3; ++i) { for(unsigned int j = 0; j < 3; ++j) { std::cout << "Kombination " << (j+1) << std::endl; } } std::cout << std::endl; //flach geklopft unsigned int tiefe = 2; unsigned int kombinationen = 3; unsigned int n = powi(kombinationen, tiefe); for(unsigned int i = 0; i < n; ++i) { unsigned int aktuellerKombiIndex = i % kombinationen; std::cout << "Kombination " << (aktuellerKombiIndex+1) << std::endl; } }
-
Danke. Hab´s tatsächlich mittels Rekursion gelöst. Im Grunde gar nicht trivial, da ich noch einige Fälle ausschlißen musste, in denen dieselben Kombinationen auftraten, was bei ein paar Millionen Möglichkeiten schon etwas ausmacht...