There are six fundamental types of algorithms all aspiring and experienced programmers and software engineers should understand and know how to utilize: recursive, divide & conquer, dynamic programming, greedy, brute force, and backtracking. A divide-and-conquer algorithm recursively breaks down a problem into two or more sub-problems of the same or related type until these become simple enough to be solved directly. Greedy algorithms are used for solving optimization problems. A backtracking algorithm finds a solution to a problem in an incremental approach. Other examples of common computer algorithms you can learn about in a programming course include searching algorithms such as binary search, breadth search, depth search, and sorting algorithms such as bubble, selection, and merge sort.