There are several advanced UDF topics worth covering here, including recursion, error and exception handling, and assigning UDFs to other variable scopes. Each of these topics covers techniques that you can use to maximize the benefit of using UDFs in your applications.
As I mentioned in the beginning of the chapter, UDFs can be called recursively. This means that a UDF can call itself until a specific condition is met. Before you start creating recursive UDFs, there are a few things you should be aware of. First, too much recursion can be a bad thing. Recursion is both processor- and memory-intensive so recursively calling a UDF too many times has the potential to drain your server’s system resources to the point where it crashes the server. The ColdFusion engineering team recommends limiting recursive calls to fewer than 800 levels. If you have a situation where you know your recursive function call has the potential to exceed 800 levels, consider using a loop instead.
Here’s a classic example that uses recursion to
calculate the factorial for a given number. The factorial for a
positive integer is defined as the product of all of the positive
integers between 1 and
n. So, 5! equals 1*2*3*4*5.
Written as a tag-based UDF, it looks something like this:
<cffunction name="Factorial"> <cfargument name="Integer" type="Numeric" required="Yes"> <cfif Arguments.Integer le 1> <cfreturn 1> <cfelse> <cfreturn Integer * Factorial(Arguments.Integer-1)> </cfif> </cffunction> ...