First of all, all recursive functions have what is known as a "base case". A base case is the "state" which you want to get to with the recursive function. If you haven't met the base case yet, you take steps to get to that base case.

As an example to illustrate this concept, let's look at the factorial function. For a technical definition of a factorial, the

**factorial**of a non-negative integer

*n*, denoted by

*n*!, is the product of all positive integers less than or equal to

*n*. In case you forgot about 0! (the ! sign is the formal operator for the factorial), 0! is equal to 1 (so we will just forget about it). Now, let's use 5! as our example. If we were to multiply this out manually, we have

5! = 5 * 4 * 3 * 2 * 1 = 120Now that we know this, let's build a recursive function to do this. In this demo, I will use C# as the programming language, but it's the same idea in Java and C++.

Now let's look at what this function does. It first takes in 2 integers as input,public int recursiveFactorial(int base, int multiplier) {

//this is our base case

if (multiplier == 1) {

return base;

}

else {

//if we haven't met our base case yet, we take steps to get to that base case

base = base * multiplier;

return recursiveFactorial(base, (multiplier - 1));

}

*base*and

*multiplier*. Base is the number we start out with (in this case, 5), and multiplier is the number we will multiply base by if we haven't met our base case (

*multiplier*starts out as

*base*- 1 to fit the definition of the factorial). The base case here is to get

*multiplier*= 1. So now, let's run our function and see how the recursion works.

First, we will call

Now here, we check: is 4 equal to 1? No, it is not, so the else part of our recursive function activates and we simplify things to get closer to our base case by calling the function again with 20 as ourrecursiveFactorial(5, 4);

*base*input variable and (4-1) as our

*multiplier*input variable.

Now we check again: is 3 equal to 1? No, it is not, so the else part of our recursive function activates again (and we multiplyrecursiveFactorial(20, 3);

*base*times

*multiplier*) to get closer to our base case.

Are we starting to get the picture yet? Now here, we check: is 2 equal to 1? No, it is not, so the else part of our recursive function activates yet again and things are simplified even more (by multiplyingrecursiveFactorial(60, 2);

*base*times

*multiplier*again) to get ever closer to our base case.

We check again: is 1 equal 1? Yes, we have finally met our base case, so we just end things by returningrecursiveFactorial(120, 1);

*base*. From here, the value "bubbles up" to the top "level" (where we first called the

*recursiveFactorial*function).

If you've ever heard the term "stack overflow", it comes from this idea of recursion. With a stack overflow, a recursive function is called so many times that the computer doesn't have enough memory available to handle the recursion, so the computer crashes.

So does this guide help you to grasp the idea of recursion? If you are a seasoned developer, can I improve this guide (or give better examples)? Please let me know in the comment box below.

While you're learning about recursion, why not try some delicious Mystic Monk Coffee? Mystic Monk Coffee (use this link or click on the picture below to access the store and purchase) is what you really need when it comes to coffee. Trust me, it's good coffee (in most instances, much better than Starbucks coffee) and you won't regret buying some (just keep it away from your computer keyboard or laptop/tablet). If you like tea more than coffee, they also offer tea. If you have a Keurig machine, the monks also have k-cups for purchase as well (known as "monk shots") Using the link (or picture below) to buy the coffee (or tea) helps the monks out and helps me with my endeavors as well. The coffee (or tea) also makes for great gifts for friends and family as well.

While we are waiting for updates to my windows phone apps (trust me, I'm working on them), if you want to go ahead and get my apps now, please use the following links:

BSA Eagle Tracker download: http://bit.ly/Mm1Upo

Mobile Media Manager (paid version) download: http://bit.ly/y3rf6V

Mobile Media Manager (free version) download: http://bit.ly/xGCsWE

## No comments:

## Post a Comment