时间复杂度:O(n)VS O(2 ^ n)

时间:2019-07-24 16:07:46

标签: time time-complexity complexity-theory

给出以下两个函数,为什么第一个n的时间复杂度为什么第二个为2 ^ n?

唯一的区别是第二个函数返回之前的+1。我不知道这会如何影响时间复杂度。

int f1(int n){

   if (n==1)
    return 1;

  return f1(f1(n-1));


}

int f2(int n){

   if (n==1)
    return 1;

  return 1+f2(f2(n-1));


}

1 个答案:

答案 0 :(得分:1)

这与递归函数返回所需的时间有关。

在第一个函数中,您返回的1承载在所有函数之外,因此当您达到1时,您立即结束所有嵌套调用。

在第二个函数上,由于返回值增加1,当返回1时,您将创建更多的嵌套调用。

要对此进行可视化,请在函数中添加一条打印语句,然后检查输出。

在python中,应该是

def f1 (n):
    print (n)
    if n < 2:
        return 1

    return f1(f1(n-1))

def f2 (n):
    print (n)
    if n < 2:
        return 1

    return 1 + f2(f2(n-1))

f1(10)
f2(10)