Как найти временную сложность этой рекурсивной функции? - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь найти временную сложность рекурсивной функции ниже.Я пытался нарисовать дерево, но это сбивает с толку, потому что в условии if функция вызывается один раз, а в противном случае дважды.

Чтобы дать некоторый контекст, функция вызывается на узлах дерева.Задача - рассчитать максимальный рейтинг каждого узла.Правило состоит в том, что если вы добавляете какой-либо узел к рейтингу, вы не можете добавить его дочерние элементы к узлу, но если вы не добавляете его, вы можете добавить, какие дочерние элементы добавить или нет.

Здесьэто функция:

static int solve(Node node, boolean take) {     
    int result;
    if(take) {          
        result = node.rating;
        for(Node child : node.children) {
            result += solve(child, false);
        }
        return result;
    }

    result = 0;
    for(Node child : node.children) {
        result += Math.max(solve(child, true), solve(child, false));
    }
    return result;
}
...