【发布时间】:2023-03-08 18:25:01
【问题描述】:
Determining complexity for recursive functions (Big O notation) 上的问题 5 是:
int recursiveFun(int n)
{
for(i=0; i<n; i+=2)
// Do something.
if (n <= 0)
return 1;
else
return 1 + recursiveFun(n-5);
}
为了突出我的问题,我将递归参数从n-5 更改为n-2:
int recursiveFun(int n)
{
for(i=0; i<n; i+=2)
// Do something.
if (n <= 0)
return 1;
else
return 1 + recursiveFun(n-2);
}
我知道循环在n/2 中运行,因为标准循环在n 中运行,我们迭代了一半的次数。
但是递归调用不也一样吗?对于每个递归调用,n 减 2。如果 n 为 10,则调用堆栈为:
recursiveFun(8)
recursiveFun(6)
recursiveFun(4)
recursiveFun(2)
recursiveFun(0)
...这是 5 个调用(即 10/2 或 n/2)。然而,Michael_19 提供的答案表明它在n-5 中运行,或者在我的示例中为n-2。显然n/2 与n-2 不同。在分析 Big-O 时,我哪里出错了,为什么 recursion 与 iteration 不同?
【问题讨论】:
标签: recursion iteration big-o computer-science