对于具有两个输入的函数,您如何找到T(n)运行时(不是大O运行时)?你只是考虑输入'n'吗?
int h(int a, int b) {
if (a > 0) {
return h(a-1, a+b);
}
else {
return 0;
}
}
答案 0 :(得分:3)
在这种情况下,我们只需要考虑a
,因为此算法的长度不依赖于b。
换句话说,因为我们可以传入20000或-2而不会影响我们的时间(忽略添加a+b
的实际时间),我们不应该在计算中考虑b。
在更一般的情况下,如果输入确实取决于a
和b
,我们只会在时间复杂度函数中考虑这一点。换句话说,T(a, b)
不仅仅是T(a)
。
答案 1 :(得分:0)
因为此函数仅在a上重复,并且a在每一步中减少1,所以它将给出线性复杂度。所以答案是T(a)。
答案 2 :(得分:0)
鉴于每个(a,b)对的函数值都为零 - 递归将始终以else分支结束 - 编译器可能足够聪明,可以有效地将代码减少到"返回0"对于整个身体并留下所有if / else和递归的东西,导致O(1)复杂性和相应的运行时间。