# what is backtracking?

Backtracking is an algorithmic technique for solving problems by trying out different solutions and undoing them if they fail to reach the desired outcome. It is used to solve problems that involve searching through a large number of possible solutions.

Backtracking works by incrementally building a potential solution, and then abandoning the partial solution as soon as it is determined that it cannot be completed to a valid solution. This allows the algorithm to efficiently explore the search space without wasting time on solutions that are guaranteed to be invalid.

Here’s an example to illustrate the backtracking algorithm:

Suppose you are given a list of numbers and are asked to find all possible subsets that add up to a target value. For example, if the list is [1, 3, 4, 5] and the target value is 7, then the possible subsets are [3, 4], [1, 3, 5], and [4, 3].

The backtracking algorithm for this problem would work as follows:

- Start with an empty subset and a running sum of 0.
- For each number in the list: a. Add the number to the running sum. b. If the running sum equals the target value, add the current subset to the list of solutions. c. If the running sum is less than the target value, recursively call the algorithm with the next number in the list. d. Remove the number from the subset and subtract it from the running sum.
- Return the list of solutions.

Using this algorithm, we would start with an empty subset and a running sum of 0. We would then add the first number (1) to the subset and the running sum, but since the running sum is less than the target value, we would recursively call the algorithm with the next number in the list (3). We would continue this process until we reach the subset [1, 3, 5], which adds up to the target value. We would then add this subset to the list of solutions and backtrack to find any other possible solutions.