给出以下两个函数,为什么第一个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));
}
答案 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)