运行以下代码的时间

时间:2017-03-01 23:32:09

标签: recursion time-complexity

所以我的代码是

function mystery(n, k):
     if k ≥ n 
        return foo(n) 
    sum = 0 
    for i = k to n 
        sum = sum + mystery(n, k+1) 
    return sum

我创建了一棵树,我得到的答案是$ n ^ 2 *(n-1)!$。其中foo是O(n。)它是否正确?

1 个答案:

答案 0 :(得分:0)

你是对的。如果要将递归转换为迭代,则会有循环运行三角(nk)次 - 其中三角形是三角函数,整数1到N的总和。公式为

三角形(N)= N *(N-1)/ 2

将此乘以O(n),将1/2常数减去,这就产生了答案。

[N.B.由于 k 是出于复杂性目的的常量,因此您也放弃了]