我试图找到下面的递归函数的时间复杂度。我试图绘制树,但它很混乱,因为在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;
}