1. **Base Case**: a simple problem that can be answered directly 2. **Recursive Case**: can be described in smaller occurrences of the same problem 3. **Initial Value**: some input ##### Example: ```js function recursiveFunc(input) { if (basecase) { // do something easy we know } else { // recursive case // a bit harder to solve, so ask for help // by calling ourselves with an input // that gets us closer to teh base case recursiveFunc(newInput) } } ```