Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Theta递归运行时_C++_Recursion_Runtime_Big Theta - Fatal编程技术网

C++ Theta递归运行时

C++ Theta递归运行时,c++,recursion,runtime,big-theta,C++,Recursion,Runtime,Big Theta,如何计算此给定代码的θ运行时: void f(int n) { for (int i=3; i<n; ++i) for (int j=0; j<i; ++j) f(n-1); } 由于每个嵌套for循环的复杂度都是O(N^2),并且每次在另一个函数中调用函数时,复杂度都会成倍增加,最终得到O((N!)^2),其中N也是递归的次数。这当然是因为N!=N*(N-1)*(N-2)*…*(N-N+1),用于创建阶乘的所有值都是平方。如果我们将

如何计算此给定代码的θ运行时:

void f(int n)
{
    for (int i=3; i<n; ++i)
        for (int j=0; j<i; ++j)
            f(n-1);
}

由于每个嵌套for循环的复杂度都是O(N^2),并且每次在另一个函数中调用函数时,复杂度都会成倍增加,最终得到O((N!)^2),其中
N
也是递归的次数。这当然是因为
N!=N*(N-1)*(N-2)*…*(N-N+1)
,用于创建阶乘的所有值都是平方。

如果我们将3替换为零(这显然不会改变Θ),我们可以很容易地得出函数调用的确切数量:

Θf(1)=1
Θf(n)=n2⋅ Θf(n-1)∀ n>0

所以,利用乘积的交换性

                  N                 N          n
Θf(n)=  ∏   j 2  =   ∏ J  ⋅  ∏ j=n!⋅ n
               i=1             i=1     i=1
=(n!)2


正如Jason所说。

提示:n^2*(n-1)^2*(n-2)^2*…=(n*(n-1)*(n-2)*…)^2
f
没有返回值,因此
f(n)
不等于任何值;大θ(也叫大-O)表示法关注的是在执行算法时执行的操作数空格是否正确?这是相当黑客的,我讨厌手头没有LaTeX/MathJax。
f(n) = n^2 * f(n-1)
f(n) = n^2 * (n-1)^2 * f(n-2)
f(n) = n^2 * (n-1)^2 * (n-2)^2 * f(n-3) 
...