Recursion and Algorithms