Сложность времени - pathToSum - рекурсивный вызов - PullRequest
0 голосов
/ 30 мая 2020

Я изо всех сил пытаюсь определить временную сложность этого 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;

    }
...