首页 > 解决方案 > 如何找到这个递归函数的时间复杂度?

问题描述

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

标签: recursiontime-complexity

解决方案


推荐阅读