aus schleifen eine rekursion erzeugen
-
hi
Hm, ich arbeite sehr selten mit strings.
Ich versuche gerade deine string variante mit feldern darzustellen, aber irgendwie wird das auch nix...char f[]="abc"; char t[4]=""; int laenge=0; void rek(char *f) { if(laenge>3) { cout<<t<<endl; return; } for(int i = 0; i != strlen(f); ++i) { ++laenge; t[laenge]=f[i]; rek(f); } }
cu
-
Mal ohne strings:
#include <string> #include <iostream> char const * f = "ab"; char result[5]; void k(char const * f, char * r, int len) { if (len == 0) { std::cout << result << std::endl; return; } for (int i = 0; i != strlen(f); ++i) { *r = f[i]; k(f, r + 1, len-1); } } int main() { result[4] = 0; k(f, result, 4); }
-
hu
Wenn die Funktion aber nur einen Parameter hat?
(wie bei mir es der Fall ist)- denn so würde ich es erstmal machen wollen - zum besseren verständnis.cu
-
rulzi schrieb:
Wenn die Funktion aber nur einen Parameter hat?
(wie bei mir es der Fall ist)- denn so würde ich es erstmal machen wollen - zum besseren verständnis.Du kannst um die Version mit Parametern, einen Wrapper mit nur einem Parameter schreiben.
Dein Programm scheitert unter anderem daran, dass die Laenge kein Parameter sondern eine globale Variable ist. Man kann auch damit arbeiten, indem der Wert nach dem rekursiven Aufruf wieder zurückgesetzt wird, aber ein Parameter ist einfacher.
-
hi
Könntest du mir das bitte mit nur einem Parameter ummodeln?
Bittecu
-
rulzi schrieb:
Könntest du mir das bitte mit nur einem Parameter ummodeln?
Dazu muss man zuerst genau wissen, was du haben möchtest. Also, was ist die Eingabe und was ist die Ausgabe?
-
hu
char f[]="abcdefghji"; int LAENGE=strlen(f); k(char t[]) { ... }
cu
-
Was ist das t[]?
-
hi
Also: der Funktion k wird das Zeichenfeld übergeben wo die ganzen Zeichen drin stehen mit denen alle möglichen kombinationen durchgeführt werden sollen. (hatte das in meinem vorhergehenden thread falsch dargestellt).
cu
-
rulzi schrieb:
Also: der Funktion k wird das Zeichenfeld übergeben wo die ganzen Zeichen drin stehen mit denen alle möglichen kombinationen durchgeführt werden sollen. (hatte das in meinem vorhergehenden thread falsch dargestellt).
Welche Länge haben die Kombinationen? Man kann normalerweise die Länge beliebig wählen. Bei "ab" und der Länge 3 hat man:
aaa
aab
aba
abb
baa
bab
bba
bbb
-
hi
Die Länge sollte als globale variable existieren.
cu