Combination Sum

Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target. The same repeated number may be chosen from candidates unlimited number of times. Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations.

Example 1: Input: candidates = [2,3,6,7], target = 7, A solution set is:

[
,
[2,2,3]
]
Example 2: Input: candidates = [2,3,5], target = 8, A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
Solution
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/

var combinationSum = function(candidates, target) {
var options = [];
var recurse = function(numbers=[], sum=0, index=0) {
for(let i=index; i<candidates.length; i++) {
let candidate = candidates[i];
if (sum + candidate === target) {
options.push(numbers.concat(candidate));
} else if (sum + candidate < target) {
numbers.push(candidate)
recurse(numbers, sum + candidate, i);
numbers.pop();
}
}
}
recurse();
return options;
};