Suche…


Einführung

Eine Funktion, die sich selbst aufruft, wird als rekursiv bezeichnet . Rekursive Logik kann oft auch als Schleife implementiert werden. Die Rekursion muss mit einem Parameter gesteuert werden, damit die Funktion weiß, wann die Rekursion und Vertiefung des Aufrufstapels unterbrochen werden muss. Unbegrenzte Rekursion führt schließlich zu einem Laufzeitfehler "28": "Nicht genügend Stapelspeicher".

Siehe Rekursion .

Bemerkungen

Rekursion ermöglicht wiederholte, selbstreferenzierende Aufrufe einer Prozedur.

Faktoren

Function Factorial(Value As Long) As Long
    If Value = 0 Or Value = 1 Then
         Factorial = 1
    Else
       Factorial = Factorial(Value - 1) * Value
    End If
End Function

Folder Rekursion

Early Bound (mit einem Verweis auf Microsoft Scripting Runtime )

    Sub EnumerateFilesAndFolders( _
        FolderPath As String, _
        Optional MaxDepth As Long = -1, _
        Optional CurrentDepth As Long = 0, _
        Optional Indentation As Long = 2)
      
        Dim FSO As Scripting.FileSystemObject
        Set FSO = New Scripting.FileSystemObject
        
        'Check the folder exists
        If FSO.FolderExists(FolderPath) Then
            Dim fldr As Scripting.Folder
            Set fldr = FSO.GetFolder(FolderPath)
            
            'Output the starting directory path
            If CurrentDepth = 0 Then
              Debug.Print fldr.Path
            End If
            
            'Enumerate the subfolders
            Dim subFldr As Scripting.Folder
            For Each subFldr In fldr.SubFolders
                Debug.Print Space$((CurrentDepth + 1) * Indentation) & subFldr.Name
                If CurrentDepth < MaxDepth Or MaxDepth = -1 Then
                    'Recursively call EnumerateFilesAndFolders
                    EnumerateFilesAndFolders subFldr.Path, MaxDepth, CurrentDepth + 1, Indentation
                End If
            Next subFldr
            
            'Enumerate the files
            Dim fil As Scripting.File
            For Each fil In fldr.Files
                Debug.Print Space$((CurrentDepth + 1) * Indentation) & fil.Name
            Next fil
        End If
    End Sub


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow