when you need to find a correct series of choices
“pruning the recursion tree” - normal dfs will traverse every node, backtracking allows you to escape a path once invalidated
you will need to “backtrack” to the previous choice when landing on an incorrect choice
can be done recursively or non-recursively
- recursive is unintuitive as it is harder to see the backtracking done in code