func(n){
if(n == 0){
//print sth
return;
}
for(i=1;i<=6;i++){
func(n-1)
}
}
请帮助我理解上面伪代码的时间复杂性。
答案 0 :(得分:3)
您的递归代码具有以下属性:
在数学上,我们可以将完成的总工作建模为递归关系,让T(n)表示调用func(n)
时完成的工作量:
让我们一起玩这个,看看我们发现了什么。
通过观察这一点可能并不明显,这里的数字实际上是由公式
给出的T(n)=(6 n + 1 -1)/ 5
我们可以简要地查看如下:
渐近地,这意味着T(n)=Θ(6 n ),因此总运行时间为Θ(6 n )。
那么...(6 n + 1 - 1)/ 5来自哪里?注意
更一般地说,T(n)似乎具有
形式6 n + 6 n-1 + ... + 6 1 + 6 0 。< / p>
这是几何级数的总和,简化为(6 n + 1 - 1)/ 5。