Problem: Find combinations summing to target. Numbers reusable.
function backtrack(candidates, remaining, start, current, result):
if remaining == 0:
result.add(copy of current)
return
if remaining < 0:
return
for i from start to candidates.length - 1:
current.add(candidates[i])
backtrack(candidates, remaining - candidates[i], i, current, result)
current.removeLast()
start = i allows reuse. Sort and skip if current > remaining.