与for循环的Java递归关系

时间:2015-10-31 04:18:08

标签: java recurrence

public int algo(int n) {
    if (n == 1) {
        return 1;
    }
    algo(n/2);
    for (int i = 0; i < 4; i++) {
        System.out.print(i);
    }
    return 0;
}

我知道递归调用意味着它是T(n/2)但是for循环将如何影响递归关系?

编辑:我的尝试。

我认为for循环将运行log n次,因为每次运行algo(int n)时它都会运行。 algo运行log n次,因为n继续被除以2.此外,for循环运行4次迭代。所以我认为它会在重复时添加额外的4 log n,因此它将是O(n)= T(n / 2)+ 4 log n。

3 个答案:

答案 0 :(得分:5)

因为for循环是恒定时间,并且不随n变化。它不应该影响时间复杂性。

答案 1 :(得分:2)

这里你在每次递归调用中将n除以2,for loop不依赖于输入n,因此时间复杂度为O(logn)。 由for loop添加的时间复杂度是不变的,因此它将被丢弃。

在计算时间复杂度时,您必须担心输入会发生什么变化。这里for loop不依赖于输入n,因此在计算时间复杂度时不符合条件。

答案 2 :(得分:0)

具体来说,for循环对递归关系的影响最多是平凡。没有for循环,你的重复关系将是:

T n = T n / 2 + c

其中 c 是检查n==1以及方法调用和返回的开销。 for循环总是打印4次,因此总是在 k 操作中执行。新的重复关系是:

T n = T n / 2 + c + ķ

令人兴奋......我们还有一个常数( c + k )我们之前有 c ,所以我们得到相同的O(log n )。