Breaks down a main problem into multiple sub-problems. Then it makes use of all sub-problems to find the solution