O(n^n) > O(n!) > O(2^n) > O(n^2) > O(n log n) > O(n) >> O(log n)
O(log n) --> good example is binary search; elements to search gets halved each time (in perfect scenario)
For recursive functions, draw out the tree of function calls --> often is O(branches^depth) --> space complexity is O(n) though, only O(n) nodes exist at any point
Be careful of when your n is ever-shifting (ahem, many recursive problems)