Rather depends upon which language you are using. In some - LISP springs to mind - recursion is the most natural and efficient way to solve a problem. In others, such as C++ it doesn't come quite so naturally; but it can still be a very efficient technique if used wisely.
As kyeana says, something like navigating through trees or enumerating directories. For example, if you were writing a backup program that needed to process every directory and file on a hard disk then recursion would be a very natural approach.