java - 循环内递归的运行时复杂度

标签 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);

最佳答案

我猜函数的递推关系是 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(2n)。 More details .

希望对你有帮助!

关于java - 循环内递归的运行时复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45853821/

相关文章:

compiler-construction - 用托管语言编写内存管理器?

java - jenkins 构建无法下载依赖项,即使相同的 pom 在本地工作正常

java - Eclipse - gwtupload - maxSize

java - Spring Data 弹性和递归文档映射

c - 如何使用递归函数计算从 1 开始到 n 结束的连续整数的总和

java - 如何使用 hibernate 处理运行时创建的表?

javax.faces.application.ViewExpiredException 看似被忽略

java - 为什么 `setConnectionRequestTimeout` 没有停止我的 1 分钟获取请求?

mysql - mysql中的递归slug url

objective-c - 如何在运行时识别方法的返回类型?