Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Verzweifel an Rekursion

TOB2 / 4 Antworten / Baumansicht Nickles

Hallo allerseits,

ich hänge hier seit Stunden und komme nicht vorran, dabei habe ich ein (glaube ich) recht triviales Problem. Ich möchte einfach eine X-Stellige Zeichenkette mir anzeigen und dabei alle Kombinationen berücksichtigen (ich mache es in VB.net aber die Sprache ist nebensächlich). Also zb so:

A
b
c
d
e
f
g
[...]
AA
AB
AC
AD
[...]
ZZ
AAA
AAB

usw.

sollte meines erachtens ein recht simpler rekursiver Algorithmus sein. Aber ich bekomme es nicht hin :-(

bei Antwort benachrichtigen
Achim20 TOB2 „Verzweifel an Rekursion“
Optionen

Stichwort: Permutationen
Aber Hausaufgaben lösen wir hier nicht...

FUMANCHU4EVER
bei Antwort benachrichtigen
TOB2 Achim20 „Stichwort: Permutationen Aber Hausaufgaben lösen wir hier nicht...“
Optionen

Hehe,

sind keine Hausaufgaben :-) Aber eine Permutation ist etwas anderes. Eine Permutation wäre eine beliebige Umstellung der vorhandenen Buchstaben. Also Klo, olk kol etc....
Aber ich will ja auch alles ein und zweistelligen Möglichkeiten. Also alles von A bis ZZZZZZZZ. Mittlerweile bin ich mir nichtmal sicher ob es mittels Rekursion machbar ist.
Was ich suche ist eine Variation mit zurücklegen, keine Permutation. Es muss nicht zwingend rekursiv sein, aber das wäre natürlich chic. Nur ich brüte schon den ganzen Tag darüber und trete irgendwie auf der Stelle....

bei Antwort benachrichtigen
Andreas42 TOB2 „Verzweifel an Rekursion“
Optionen

Hi!

Das geht schon rekursiv, man muss nur mit den Übergabeparametern klar kommen. Beschränken wir uns erstmal auf drei Buchstaben, dann könnte man eine Funktion nutzen, die drei Laufparameter nutzt und ein weiteres Element als Zeiger auf eine der drei Laufparameter: rekprint(c1, c2, c3, i)

C1, c2 und c3 sind dann die jeweiligen Buchstaben, in i übergeben wir die Rekursionsebene.

Die Funktion macht nun nichts anderes, als an Hand von i zu bestimmen, welcher der Buchstaben "gerollt" werden soll.

Beim ersten Aufruf wäre i=1, dass würde bedeuten c1 muss 26mal hochgezählt werden und dann die Funktion mit dem neuen Wert von c1 und den alten von c2 und c3 neu aufgerufen werden. Zusätzlich übergeben wir als i den Wert i+1, also die nächste ebene.

Bei einem solchen Aufruf wird die Funktion dann c2 "rollen" und nach jedem Rollen sich neu aufrufen.

Das geht bis i=3 ist und die Funktion also c3 "rollt". Dann würde der Aufruf ja mit i=4 erfolgen. Es gibt aber keinen 4. Parameter. Das bedeutet man ist am Ende der Rekursionskette angekommen. Also gibt man den String basierend auf c1, c2 und c3 aus und beendet die Funktion ganz normale (also ohne neuen Rekursionsaufruf).

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
TOB2 Andreas42 „Hi! Das geht schon rekursiv, man muss nur mit den Übergabeparametern klar...“
Optionen

Mmh... hört sich nicht schlecht an. Werde es gleich m ausprobieren. Hatte es ursprünglich mit nur einer Variablen für Buchstaben und einer für den Rekursionsgrad probiert...

bei Antwort benachrichtigen