one of the most powerful techniques for solving problems is to break them down into smaller, more easily solved pieces. smaller problems are less overwhelming, and they permit us to focus on details that are lost when we are studying the whole thing. a recursive algorithm starts to become apparent whenever we can break the problem into smaller instances of the same type of problem. multicore processors now sit in almost every computer, but efficient parallel processing requires decomposing jobs into at least as many tasks as the number of processors.