Я изо всех сил пытаюсь определить временную сложность этого al go - ценю любую помощь здесь. Это пытается найти pathToSum с помощью рекурсии, в основном я прохожу через каждый из элементов и рекурсивный вызов с ожидающей суммой.
Я не понимаю, с какой временной сложностью рекурсивного вызова.
private List<List<Integer>> pathToSum(int[] candidates, int target, int pos) {
List<List<Integer>> combinations = new ArrayList<>();
if(candidates.length == 0 || target == 0 ) {
return combinations;
}
int prev = -1;
for(int i=pos; i<candidates.length; i++) {
if(prev == -1)
prev = candidates[i];
else if(prev == candidates[i]) {
continue;
}
if(candidates[i] > target)
break;
int val = candidates[i];
int pend = target - candidates[i];
if(pend == 0) {
List<Integer> res = new ArrayList<>();
res.add(val);
combinations.add(res);
break;
}
/**
How do we determine Big O for the below recursive call? It does recursion with same candidate set, but reduce target.
**/
List<List<Integer>> tempCombinations = pathToSum(candidates, pend, i+1);
for(List<Integer> comb : tempCombinations) {
comb.add(val);
combinations.add(comb);
}
prev = candidates[i];
}
return combinations;
}