- a fn which uses only its arguments and/or local variables to compute its result
- a fn which does not cause side effects
A function which can:
- take another function as an argument
- return another function as a result
Functions are objects. You can pass them around.
Core principle: take the big problem and divide it into smaller instances of the same problem
Requirements
- Base case: You need to make sure that you understand and define a condition in which the function is no longer invoked recursively and instead a value is returned