Поиск…
Вступление
Функция, которая вызывает себя, называется рекурсивной . Рекурсивная логика часто может быть реализована как цикл. Рекурсия должна контролироваться параметром, так что функция знает, когда прекратить рекурсию и углубить стек вызовов. Бесконечная рекурсия в конечном итоге вызывает ошибку времени выполнения «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