Just to address the recursion point that the GP brought up. Here is one of the best explanations I saw where the problem not only lends itself to a recursive solution but where the recursive solution is actually the more intuitive one rather than a loop. Also it explains with 'real-world' problems, albeit in the context of the material (game programming):
http://inventwithpython.com/blog/2011/08/11/recursion-explai...