试图找出以下算法的Big-O复杂性:
function foo1(a,b,c)
Begin
for i:=1 to a do begin
for j:=1 to b do begin
if (c>1) then
x=y+foo1(a,b,c-1);
end;
end;
End;
那么,我基本上认为:如果a,b和c是变量,则此函数具有O(n ^ n)复杂度。但是,我不太确定。
答案 0 :(得分:1)
让我们将问题分成几部分:
1)第一个循环:它从 1 变为 a ,这意味着它需要一个步骤才能完成循环。
2)第二个循环:它从 1 变为 b ,这意味着它需要 b x a 完成这些循环。为什么?因为在 a 的每个循环中,您都会执行 b 循环。这意味着:b0 + b1 + b2 ... ba。因此 - > A * B
3)然后你应用递归步骤。该递归在第二个循环中重复 c 次。这意味着对于 b 中的每次迭代,您将重复整个过程。含义(a * b)0 *(a * b)1 *(a * b)2 ...(a * b)c。因此 - > O((a * b)^ c)