An Introductory Example
Imagine the following scenario. You're a talented programmer at Robot Works, Inc. One day, a valuable customer of yours, Gene Roddenberry (of Star Trek fame), comes to you with a problem. He is creating a new TV show called "Star Trek: The Next Generation" and one of his characters in the show, Data, is an android. At the last minute, the actor who was supposed to play Data canceled on the show, and as they couldn't find another actor good enough to fill the part, they're looking for Robot Works, Inc. to build them an actual android.
While the rest of your company busily works on getting Data built, you've been assigned the task of programming him to walk (a simple enough task for a human, but for a robot, not quite so easy). After sorting through the manual produced by the other groups of your company, and after many grueling hours, you finally produce a function that will allow Data to take a single step: void take_a_step(). You call it a day.
The next day you come into work and your boss, Mr. Applegate, asks you how much progress you've made. You tell him you're done. "I'm done," you say. "But," responds your boss, "you've only written this one function take_a_step(). How can you be done? Don't you need to write functions to teach it how to take two steps? And three steps? And 100 steps?" You chuckle to yourself slightly as a knowing smile crosses your face, the smile of a person who understands the power of recursion.
What is recursion? Sometimes a problem is too difficult or too complex to solve because it is too big. If the problem can be broken down into smaller versions of itself, we may be able to find a way to solve one of these smaller versions and then be able to build up to a solution to the entire problem. This is the idea behind recursion; recursive algorithms break down a problem into smaller pieces which you either already know the answer to, or can solve by applying the same algorithm to each piece, and then combining the results.
Stated more concisely, a recursive definition is defined in terms of itself. Recursion is a computer programming technique involving the use of a procedure, subroutine, function, or algorithm that calls itself in a step having a termination condition so that successive repetitions are processed up to the critical step where the condition is met at which time the rest of each repetition is processed from the last one called to the first.
Don't worry about the details of that definition. The main point of it is that it is defined in terms of itself: "Recursion: ... for more information, see Recursion."