AW: Permutationen - Testversion
11.10.2008 21:06:00
Erich
Hallo Christina Verena,
ja, das ist eine Rekursion - Perm ruft sich immer wieder selbst auf.
Mit dem Erklären ist das nicht so einfach.
Ich gebe dir hier eine Testversion, die alle Aufrufe von "Perm" in den Spalten G und H protokolliert
und die Ergebnisse auch in die Spalten I und J schreibt.
Die Routine löscht zu Beginn alle Zellen, damit keine alten Werte stören.
Lass die Routine auch mal mit "If jj > 3 Then" und "If jj > 2 Then" laufen, damit verringerst du die Aufruftiefe.
Kannst du daran nachvollziehen, was wann passiert?:
Option Explicit
Sub tst()
Dim zzz As Long ' test
zzz = 1 ' test
Cells.Clear ' test
Range("G1:J1") = Split("aa bb Ze Erg") ' test
Perm "1234", "", 5, 1, zzz
End Sub
Sub Perm(aa As String, bb As String, Ze As Long, Sp As Long, zz As Long)
Dim ii As Integer, jj As Integer, kk As Long
zz = zz + 1 ' test
Cells(zz, 7) = aa ' test
Cells(zz, 8) = bb ' test
jj = Len(aa)
If jj > 3 Then ' testweise statt "If jj > 1 Then" laufen lassen
' If jj > 2 Then ' testweise statt "If jj > 1 Then" laufen lassen
' If jj > 1 Then ' das ist die Original-Anweisung
For ii = 1 To jj
Perm Left(aa, ii - 1) & Right(aa, jj - ii), bb & Mid(aa, ii, 1), _
Ze, Sp, zz
Next ii
Else
If Ze >= Rows.Count Then Exit Sub
For kk = Sp To Sp + Len(bb & aa) - 1
Cells(Ze, kk) = Mid(bb & aa, kk, 1)
Next kk
zz = zz + 1 ' test
Cells(zz, 9) = Ze ' test
Cells(zz, 10) = bb & aa ' test
Ze = Ze + 1
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort