循环内递归的运行时复杂性

时间:2017-08-24 05:45:53

标签: java recursion runtime

我尝试确定以下代码的运行时复杂性。我提出了T(n) = n * T(n-1) + n T(0) = 1,但不确定它是否正确以及如何解决。

private void myFunction(int[] nums, int startIndex, int target) {
    if (target == 0) {
        // do something
    }
    if (target <= 0 || start > nums.length) {
        return;
    }

    for (int i = startIndex; i < nums.length; i++) {
        myFunction(nums, i+1, target-nums[i]);
    }
}

myFunction(nums, 0, target);

1 个答案:

答案 0 :(得分:0)

我猜这个函数的递归关系是 T(n)= n * T(n-1)+ O(1),其中T(0)= 1

<强>减少

T(n) 
= n * T(n-1) + O(1)
= n * (n-1) * T(n-2) + 1 + 1
= n * (n-1) * (n-2) * T(n-3) + 1 + 1 + 1
...
= n * (n-1) * (n-2) * (n-3) ... T(0) + n * 1 (n times)
= n! + n

因此,函数的总体复杂度为 O(n!),其中O(2 n )更大。 More details

希望它有所帮助!