You're working in an office. If a question comes up, the person to consult is you. If the person to consult doesn't know the answer, consult their manager. Recurse until you have the answer. So: ask( person from, person to ): if not: from knows the answer ask( from's manager, from ) tell( from, to ) and invoke this with ask(me,me) (You still have to define `tell(from,to)` and make sure that's a no-op if `from==to`.) I like this example because it is not trivially iteratable as tail recursion. This explicitly goes up and down the stack.