Recursion 递归函数的Big-O运行时间

Recursion 递归函数的Big-O运行时间,recursion,big-o,Recursion,Big O,以下伪代码的Big-O运行时间是多少: rec(int N) { if (N<0) return; for i=1:N { for j=1:N { print("waste time"); } rec(N-1); } } 或同等地 (N-k)^2 * nPk from k=0 to k=N-1 大O运行时仍然是O(N!)?如果我们将“浪费时间”循环嵌套得更多呢?如果我们将“浪费时间”循环替

以下伪代码的Big-O运行时间是多少:

rec(int N) {
    if (N<0) return;
    for i=1:N {
        for j=1:N {
            print("waste time");
        }
        rec(N-1);
    } 
}
或同等地

(N-k)^2 * nPk from k=0 to k=N-1
大O运行时仍然是O(N!)?如果我们将“浪费时间”循环嵌套得更多呢?如果我们将“浪费时间”循环替换为需要2^(N-k)时间而不是(N-k)^2时间的循环,会怎么样


我的猜测是,所有这些问题的答案仍然是O(N!),因为本系列的最后几个术语占主导地位。如果我错了,请纠正我。

你是对的:在你所描述的所有场景中,它仍然是
O(n!)
,因为这是该系列的主要因素-阶乘增长比其他因素快得多,它很快成为算法运行时间的主要瓶颈

除非将浪费时间循环替换为比
O(n!)
更糟糕的循环(例如
O(n^n)
),否则它将始终是
O(n!)

(N-k)^2 * nPk from k=0 to k=N-1