编程语言
首页 > 编程语言> > java – Big o表示法和递归函数

java – Big o表示法和递归函数

作者:互联网

我正在尝试学习Big-O符号,但我很难计算递归函数的时间复杂度.

你能帮我理解下面例子的时间复杂度吗?

public int recursiveFunction(int n) {
    if (n == 0) {
        return 0;
    }

    return Math.max(recursiveFunction(rand(n)) + 2,recursiveFunction(n - 1));
}

public int rand(int n) {
    return new Random().nextInt(n - 1);
}

谢谢.

解决方法:

时间将取决于rand(n)返回的内容,但如果你采取最坏的情况,这将是n-2.所以代码简化为:

public int recursiveFunction(int n) {
    if (n == 0) {
        return 0;
    }

    return Math.max(recursiveFunction(n - 2) + 2,recursiveFunction(n - 1));
}

其渐近上界等于:

public int recursiveFunction(int n) {
    if (n == 0) {
        return 0;
    }

    recursiveFunction(n-1);
    recursiveFunction(n-1);

    return 0;
}

这是一个深度为n且分支因子为2的递归,因此O(2 ^ n)时间复杂度.

标签:java,recursion,big-o,time-complexity
来源: https://codeday.me/bug/20190725/1536165.html