Schleifen rekursiv umschreiben
-
Hallo
wie kann man die Schleifen in eine Rekursive Form bringen:for (int n1 = minussteps; n1 <= data->steps; n1++) { for (int n2 = minussteps; n2 <= data->steps; n2++) { for (int n3 = minussteps; n3 <= data->steps; n3++) { for (int n4 = minussteps; n4 <= data->steps; n4++) { for (int n5 = minussteps; n5 <= data->steps; n5++) { for (int n6 = minussteps; n6 <= data->steps; n6++) { foo = berechneFoo(n1, n2, n3, n4, n5, n6); } } } } } }
Der Sinn ist: Ich will die Anzahl der Schleifen dynamisch aendern koennen. Also das man ein Parameter hat, "tiefe", und bei tiefe=5 sinds halt 5 Schleifen, bei tiefe=12 eben 12 Schleifen.
Achja und noch eine kurze Frage. Die Schleifen oben gehen alle von -steps...0...+steps. Das Problem ist das 0 eigentlich nicht gestatet ist (div durch 0). Kann man irgendwie machen das berechneFoo() fuer alle Zahlen von -steps bis +steps bis auf die 0 angewendet wird?
-
"Halb-rekursiv" koennte man es zum Beispiel so schreiben:
void foo(int n, vector<int> params = vector<int>()) { if(n-- == 0) compute_something(params); else for(params.push_back(minussteps); params[n] <= data->steps; ++params[n]) if(params[n]) // do not descend if current param is 0 foo(n, params); }
n ist dabei die Anzahl der Parameter. Alternativ koenntest du auch die Zaehlmethode eines Kilometerzaehlers simulieren, also immer die niedrigstwertigste Stelle um eins hochzaehlen, und wenn es ueberlaeuft die naechsthoehere um 1 erhoehen und die aktuelle auf den Minimalwert zuruecksetzen.
Richtig rekursiv wird das in C++ wahrscheinlich nicht schoen. Zum Vergleich etwas Haskell-Code, der die Funktion foo auf alle Kombinationen von minussteps..steps der Laenge depth anwendet:
map foo $ sequence $ replicate depth [minussteps..steps]
-
Kann man Haskel Code in Java per JNI einbinden? Das sieht naemlich seht schoen aus
Aber ich werde wohl doch eher C verwenden.
PS: ich finde den Zeitunterschied echt krass, bei euch ist es Nacht, bei mir scheint die strahlende Sonne.
-
DEvent schrieb:
PS: ich finde den Zeitunterschied echt krass, bei euch ist es Nacht, bei mir scheint die strahlende Sonne.
Bei schien bis vor einer Stunde auch noch die Sonne.
Laut Profil bist du uebrigens in Muenchen.
-
Christoph schrieb:
DEvent schrieb:
PS: ich finde den Zeitunterschied echt krass, bei euch ist es Nacht, bei mir scheint die strahlende Sonne.
Bei schien bis vor einer Stunde auch noch die Sonne.
Laut Profil bist du uebrigens in Muenchen.Denkst ich aktuallisiere das Profil wenn ich mal ausser Landes bin
Bin hier im total ueberfuellten Seoul.
-
DEvent schrieb:
Kann man Haskel Code in Java per JNI einbinden? Das sieht naemlich seht schoen aus
Aber ich werde wohl doch eher C verwenden.
Es gibt CAL. Ist 'ne Haskell-ähnliche Sprache, die Bytecode für die JVM generiert. Ich habe es allerdings nie ausprobiert und kann dir auch nichts näheres dazu sagen.
-
Christoph schrieb:
"Halb-rekursiv" koennte man es zum Beispiel so schreiben:
was bedeutet halb-rekursiv?
-
DrGreenthumb schrieb:
Christoph schrieb:
"Halb-rekursiv" koennte man es zum Beispiel so schreiben:
was bedeutet halb-rekursiv?
Ich habe das in Anfuehrungszeichen gesetzt, weil es eine ad-hoc-Definition war. Ich wollte damit ausdruecken, dass zwar eine der Schleifen durch Rekursion dargestellt wird, aber die Schleife ueber den Index immer noch iterativ mit for geschrieben ist.
IMHO wird es halt recht umstaendlich, das in C++ vollstaendig rekursiv zu schreiben.
-
Christoph@Uni schrieb:
...
@Uni um 5 Uhr in der Früh?
-
zeitmaschine schrieb:
Christoph@Uni schrieb:
...
@Uni um 5 Uhr in der Früh?
Ich kann nichts dafuer, dass das Forum meine Zeitzone nicht anzeigt.