Ein schönes Beispiel hast Du gewählt, snb.
Standardbeispiele sind ansonsten "Türme von Hanoi" oder "Suchen in allen Unterverzeichnissen". Aber Deins ist viel besser, da kurz!
Hallo snb,
A) zu 5.4 complete procedure
1. Um die Vorteile der Recursion deutlicher darzustellen, könnte man n und k als Parameter der Routine M_Snb eintragen. (In dem Sinn: Man kann über die Parameter beliebige n und k vorgeben ohne das Porgramm ändern zu müssen.)
2. Du hast in der Routine M_comb die Konstante 3 (=k-2) fest eingetragen und ermittelst die aktuelle Ebene über die Split-Funktion. Ich fände es allgemeiner die Ebene als Parameter der Routine M_comb zu übergeben und auf jeden Fall k als Parameter der Routine M_comb oder als Modul-Variabel zu übergeben.
B) Ein Beispiel
Ein einfaches Beispiel für eine Recursion, dass schon einigemale in den Foren nachgefragt wurde, ist das Suchen nach einer Kombination von Zahlungseingängen, die in der Summe zu einer Rechnung passen.
@Ego
Das stimmt. Wie du sehen kannst in der Beispieldatei ist das genau was ich gemacht habe.
Der Text im page war nur dargestellt um das Prinzip von recursion zu verdeutlichen.
Danke für deine Vorschläge. :19:
Ih bin mir nich sicher ob deinen Beispielvorschlag sinnvoll ist, weil es of kein passende Lösung gibt.
Hallo,
zuerst vielen Dank für diesen Beitrag, es ist auch meine Erfahrung wie schwer verständlich das Thema Recursion ist.
Ein Beispiel für den Einsatz ist auch das Auslesen eines Zip-files (wer denkt da an Exel?)
Code:
Sub zpath()
dim sh, n
Set sh = CreateObject("shell.application")
Set n = sh.namespace("C:\temp\test4.zip") '<<<< anpassen >>>>
recur sh, n
End Sub
Sub recur(sh, n)
dim i , subn
For Each i In n.items
If i.isfolder Then
Set subn = sh.namespace(i)
recur sh, subn
Else
Debug.Print i.Path, i.name
End If
Next
Exit Sub
end sub
Als Brainstorming erinnerte ich mich an einen meiner ersten Versuche mit Basic (C64) ein "Apfel-Männchen" (Chaos-Theorie, Mandelbrot-Mengen) zu programmieren.
Aktueller (und ungelöst) ist, aus mehreren Webseiten für alle Elemente die Header auszulesen. Dies ist bisher an der unterschiedlichen Struktur von Webseiten gescheitert.
Allgemeiner, viele Prozesse lassen sich mit x(t) = f(x(t-1)) beschreiben. Würde das ebenfalls in den Bereich passen?
mfg
Ola @Fennek
die Items einer Folder können hier nur gelesen werden mittels .getfolder.items
Code:
Dim sh, c01
Sub M_snb()
Set sh = CreateObject("shell.application")
M_items "G:\OF\zip_002\__ribbon_test.xlsx.zip"
MsgBox c01
End Sub
Sub M_items(c00)
For Each it In sh.Namespace(c00).items
c01 = c01 & vbLf & it.Name
If it.isfolder Then
For Each it1 In it.getfolder.items
c01 = c01 & vbLf & it1.Name
Next
End If
Next
End Sub
@Fennek
Für Fibonacci scheint mir recursion unnötig kompliziert:
Code:
Sub M_snb_fib()
ReDim sp(30)
sp(0) = 1
sp(1) = 1
For j = 2 To UBound(sp)
sp(j) = sp(j - 2) + sp(j - 1)
Next
MsgBox sp(UBound(sp))
End Sub
(18.10.2019, 11:24)snb schrieb: [ -> ]Für Fibonacci scheint mir recursion unnötig kompliziert
Um Gottes willen! Da wird der Stack so groß wie alle Einzelzahlenspeicher zusammen.
Wuste nicht das sie/er auch VBA Spezialist war ?
Meinst Du mich, die Leonarda? Nee, bin ich nicht. Aber jeder, der Rekursion programmiert, hat bestimmt schon mal "Speicherüberlauf" erlebt, weil er nicht aus einem Aufruf wieder zurückkam.