The base case is a problem that you either already know the answer to, or can solve using some other method. The recursive case. The solutions are then combined into the answer for the whole problem. If it doesn't, then the base case will never be reached, and the algorithm will not terminate. Note that a recursive algorithm may actually have any number of base cases or recursive cases, but they are generally lumped together conceptually.
Recursion is an extremely useful technique.
For example, consider the problem of doing an inorder traversal of an ordered binary tree. Unfortunately, it is quite complicated to correctly state the quicksort algorithm without recursion. Once the algorithm was restated in a recursive form, however, the algorithm was quickly proven to be correct. As an aside, unrelated to recursion, note the use of pointer notation to represent the array. By using pointer notation instead of array notation, we can eliminate the requirement that we specify the length of the array as part of its type, but instead can pass this as a separate parameter.