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