A function that calls itself repeatedly, satisfying some condition is
called a Recursive Function. Using recursion, we split a complex problem into its single simplest case.
The recursive function only knows how to solve that simplest case. You'll see the difference
between solving a problem iteratively and recursively later.
Warning!
Beware! Use the recursion technique carefully, if you fail to handle it
appropriately you can
end up with a never-ending ASP application.
Same Old Factorial problem
Almost for every language, the beginners learning the concept of recursion
are presented with
the same old Factorial problem. I'll follow the traditional path, because I
feel that it's the easiest
way to understand the basic concept of recursion.
Understanding the problem
In mathematics, the factorial of a positive integer n, written as n! is
represented by the following
formula:
n! = n . (n-1) . (n-2) . (n-3) . Š. . 1
In plain english, factorial of a number is the product of that number with
a number 1 less than
that number, this multiplication process continues until the number which
is being multiplied,
eventually becomes equal to 1.
Iterative Solution
In the following function the value of 5! is calculated iteratively:
<%
Response.Write iterativeFactorial (5)
Function iterativeFactorial ( intNumber )
Dim intCount, intFactorial
intFactorial = 1
For intCount = intNumber To 1 Step -1
intFactorial = intFactorial * intCount
Next
iterativeFactorial = intFactorial
End Function
%>
Recursive Solution
The following function represents the recursive solution for the factorial
problem.
<%
Response.Write recursiveFactorial (5)
Function recursiveFactorial ( intNumber )
If intNumber <= 1 Then
recursiveFactorial = 1
Else
recursiveFactorial = intNumber * recursiveFactorial ( intNumber - 1 )
End If
End Function
%>
The working of the above function recursiveFactorial is simple. If the
integer argument
"intNumber" is less than or equal to one, then the function returns 1, else
the return value of the
function is the product of intNumber with the value returned by the same
function for integer
argument "intNumber-1".
Answer of the above problem:
5! = 5 . (5-1) . (5-2) . (5-3) . (5-4)
Simplifying:
5! = 5 . 4 . 3 . 2. 1 = 120
Example: Folder Tree
The following example will display the tree structure for a specified folder.
<%
' Displays the Tree structure, replaces vbTab character with 3 HTML
spaces
Response.Write Replace (DisplayFolderTree ("c:\windows", 0), vbTab,
" ")
Function DisplayFolderTree ( strFolder, intTreeLevel )
Dim objFileSystem, objFolder, objSubFolders, objTempFolder
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
' Get the name of current folder
Set objFolder = objFileSystem.GetFolder ( strFolder )
' Get the list of subfolders
Set objSubFolders = objFolder.SubFolders
' Adds the name of current folder with proper indentation
' intTreeLevel is used only for indenting folder name
according to its pos ition
DisplayFolderTree = DisplayFolderTree & String ( intTreeLevel,
vbTab) & ""
DisplayFolderTree = DisplayFolderTree & vbTab & objFolder.Name &
"<br>"
' Recursion takes place here
' If any "subfolders exist", the function is repeated for
them too!
If objSubFolders.Count > 0 Then
For Each objTempFolder in objSubFolders
strArgument = strFolder & "\" & objTempFolder.Name
DisplayFolderTree = DisplayFolderTree &
DisplayFolderTree ( strArgument, intTreeLevel+1 )
Next
End If
' When the control reaches HERE! This means your function has
ended
' Now no more recursive calls to the function will take place
End Function
%>
Conclusion
The recursive functions solve the problem in a method much identical to
their real-life solutions.
In the example above, we simply display the name of current folder. Then we
obtain a list of
subfolders and repeat the function for each of them.
While using iterative functions we know about the number of iterations, ie.
how many times a
loop will be executed, in advance.
In the factorial problem, recursion is not necessary because we know that a
loop will be executed
until the value of the number becomes 1. But, in Folder Tree example, we
never know how many
subfolders may be present in a folder and how many iterations will be
required. For this purpose,
the most suitable solution is to call the function recursively to display
information about a folder
and its subfolders.
About the Author
If you have any questions about this article, e-mail them to Muhammad Umair Siddique