Clever-Excel-Forum

Normale Version: VBA und Recursion
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

Vielleicht gibt es hier Leute die in eine VBA Technik interessiert sind die man nicht so oft begegnet; Recursion

Wenn man damit bekannt ist kann es viel VBA-Code und Ärger sparen.

Schau mal hier:  http://www.snb-vba.eu/VBA_Recursion_en.html

Vorschläge für Verbesserung und Beispiele sind wilkommen.

Tschüss

NB. Auch hier gepostet: https://www.helpmij.nl/forum/showthread....n-recursie   :16:
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.
Seiten: 1 2