我尝试确定以下代码的运行时复杂性。我提出了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);
答案 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
希望它有所帮助!