Я пытаюсь найти временную сложность рекурсивной функции ниже.Я пытался нарисовать дерево, но это сбивает с толку, потому что в условии 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;
}