Поиск…


Вступление

Функция, которая вызывает себя, называется рекурсивной . Рекурсивная логика часто может быть реализована как цикл. Рекурсия должна контролироваться параметром, так что функция знает, когда прекратить рекурсию и углубить стек вызовов. Бесконечная рекурсия в конечном итоге вызывает ошибку времени выполнения «28»: «Вне пространства стека».

См. Рекурсия .

замечания

Рекурсия позволяет повторять вызовы с саморегуляцией процедуры.

Факториалы

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

Рекурсия папки

Ранняя привязка (со ссылкой на 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow