C 关系T(n)=nT(n-1)+n的时间复杂度是多少
关系Tn=nTn-1+n的时间复杂度是多少 在我的节目里是这样的C 关系T(n)=nT(n-1)+n的时间复杂度是多少,c,algorithm,time-complexity,C,Algorithm,Time Complexity,关系Tn=nTn-1+n的时间复杂度是多少 在我的节目里是这样的 f(int n) { c++; if(n>0) for(i=1;i<=n;i++) f(n-1); } 我拿了一个计数器来计算函数调用了多少次 它给出了n到n之间的答案! 谢谢。您的代码缺少递归的+n部分,因此我假设代码是错误的,递归 T(n) = n*T(n-1) + n 这是正确的 设fn=Tn/n!,然后 因此Tn~e*n 调用该函数 n*f(n-1)
f(int n)
{
c++;
if(n>0)
for(i=1;i<=n;i++)
f(n-1);
}
我拿了一个计数器来计算函数调用了多少次
它给出了n到n之间的答案!
谢谢。您的代码缺少递归的+n部分,因此我假设代码是错误的,递归
T(n) = n*T(n-1) + n
这是正确的
设fn=Tn/n!,然后
因此Tn~e*n 调用该函数
n*f(n-1)
时代。将fn-1替换为该定义会
n*((n-1)*f(n-2)
再次替换会产生:
n*((n-1)*((n-2)*f(n-3)))
拆卸支架:
n*(n-1)*(n-2)*...(1)
这使得:
n= 3: 3*2*1 = 6
n= 4: 4*3*2*1 = 24
n= 5: 5*4*3*2*1 = 120
哪个是n 我们可以列出几个术语
T(0) = 0
T(1) = 1 * 0 + 1
T(2) = 2 * 1 + 2 = 4
T(3) = 3 * 4 + 3 = 15
T(4) = 4 * 15 + 4 = 64
...
我们可以注意到一些事情。首先,函数的增长比n!快!;它开始时比n=0时小,在n=1时赶上,在n>=2时超过。所以我们知道下界是n
现在,我们需要上界。我们可以注意到一件事:我认为,对于所有足够大的n>=2,Tn=nTn-1+nn!
T(0) = 0
T(1) = 1 * 0 + 1
T(2) = 2 * 1 + 2 = 4
T(3) = 3 * 4 + 3 = 15
T(4) = 4 * 15 + 4 = 64
...