考虑以下两个函数,为什么第一个的时间复杂度是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));
}
考虑以下两个函数,为什么第一个的时间复杂度是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被带到所有函数之外,因此当您达到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)
+1
可能就是答案。 - Tim Biegeleisen