I try not to get overly technical in this space, but when I get a chance to implement one of my very favorite programming techniques, I have a hard time keeping it to myself.  I want to tell you about recursion.  Per wikipedia:

A common method of simplification is to divide a problem into subproblems of the same type […] where problems are solved by solving smaller and smaller instances.

Here’s the example.  Earlier this week I was dealing with a problem where I needed to turn the english words “true” and “false” into the boolean values true and false.  This would be easy enough to do if it were simply one instance of the words:

That’s easy enough.  But what if the words were in an array?

A little more work, but still not too bad.  But what if I didn’t know ahead of time if the words were in an array?  What if I didn’t know how deeply nested they were into the array?  The answer is recursion.

Notice anything weird there? Notice that I have the function calling itself. In case you don’t know, that’s pretty weird. That’s a bit like having your phone call itself. The end result is that it’s going to keep breaking down deeper and deeper into the original variable, until all the true/false words are boolean.

Dear lord, who cares?

It’s a fair question. The real point here is that there was a simpler way to do this that probably could have worked. I could have done some combination of the first two techniques, crossed my fingers that I’d never encounter a deeper array, and moved on the something else. Why make something bulletproof? Why make something overkill? Because I can. And because the next time I need it, when maybe it’s not overkill but it’s the only way to get by, it will be easy.


Update: Since posting this, LexBlog’s own Angelo Carosio pointed out to me that I could also have used php’s excellent array_walk_recursive().