带递归和循环的程序的时间复杂度

时间:2018-08-28 03:51:29

标签: algorithm time-complexity

基于可变的循环极限调用f时的时间复杂度是多少?

示例代码:

def rec(i,j,k,n):
 for h in range(1,j):
    f(i,j,k,h)// function call O(1)
 if k<=n:
    rec(i+1,j+i+1,k+j+1,n)
 else:
    pass

使用i = 0,j = 0,k = 0并传递n的程序

rec(0,0,0,n)

1 个答案:

答案 0 :(得分:1)

i与通话深度呈线性增长。 j集成了i,因此随着通话深度的增加而平方增长 k集成了j,因此随着通话深度的增加而立方增长。

因此,到达的最大深度为 ϴ(n ^(1/3))

还有深度为 n ^ 1/3/2 ϴ(n ^ 1/3)个呼叫,使其他呼叫相形见

这些调用每次都在循环中花费 ϴ(n ^ 2/3)时间,因此最终复杂度为 ϴ(n ^ 1/3 * n ^ 2/3)= ϴ(n)

所以这很棘手,但是需要线性时间。不过,您确实应该做一个实验来确认。