Abbruch bei rekursivem Abstieg

01/01/2009 - 22:09 von Markus Steidle | Report spam
Hallo NG,

Ich hab folgende Frage:
Ich hab eine rekursive Funktion geschrieben, die mir alle Kombinationen
einer bestimmten Lànge von Zeichen in einem vordefinierten Array ausgibt und
dann auf ein Kriterium prüft. (Code unten)
Wenn das Array z.B A, B, und C enthàlt und die Lànge 3 ist liefert die
Funktion:
AAA, AAB, AAC, ABA, ABB, . usw bis CCC
Das funktioniert.
Wenn das Array größer (26 Zeichen) und die Lànge größer ist, làuft die
Funktion ewig.

Meine Frage:
Wie kann ich die Funktion stoppen und sauber aus der Tiefe wieder
aufsteigen, ohne das Programm abschießen zu müssen?

Der Funktionsaufruf lautet:
Kombination("", lànge)

Die Funktion:
Private Sub Kombination(ByVal k As String, ByVal deep As Integer)
Dim s As String = ""
System.Windows.Forms.Application.DoEvents()
If deep = 0 Then
'TextBox1.Text = TextBox1.Text + k + vbNewLine
Label1.Text = k
anzahl = anzahl + 1
Label2.Text = anzahl
If Prüfung(k) Then
TextBox1.Text = TextBox1.Text + k + vbTab + anzahl.ToString + vbTab + "
gültig" + vbNewLine
TextBox1.Refresh()
End If
Label1.Refresh()
Label2.Refresh()
'Me.Refresh()
Return
End If
For x As Integer = 0 To 31
Kombination(k + Kodierung(x), deep - 1)
Next

Return
End Sub

Danke für Eure Hilfe
Ich wünsch Euch allen ein gutes neues Jahr 2009

LG
Markus
 

Lesen sie die antworten

#1 Peter Fleischer
01/01/2009 - 23:07 | Warnen spam
"Markus Steidle" schrieb im Newsbeitrag
news:
...
Die Funktion:
...
anzahl = anzahl + 1
Label2.Text = anzahl
...



Hi Markus,
ich bekomme dein Programm nicht fehlerfrei zum Laufen. Bitte setze Option
Strict On, beseitige die Fehler und poste das konkrete Problem nochmals. Wie
soll die Rekursion denn beendet werden, wenn die CPU permanent beschàftigt
ist? Da mit der Routine eine Folge von Ergebnissen erzeugt wird, sollte beim
Sammeln dieser Ergebnisse angesetzt werden, um dann die Rekursion zu
beenden. Um die Rekursion sauber zu beenden, kann man die Routine mit einem
Rückkehrcode ausstatten, der für die Beendigung genutzt werden kann. Oder
das Abbruchkriterium wird in jeder Rekursionsebene abgeprüft.

Viele Grüsse
Peter

Ähnliche fragen