Once we have learned how to solve problems by carefully iterating over all possible cases, we can add some sophistication to our repertoire by more advanced approaches to repetitive problem solving.