【问题标题】:Time Complexity of a Recursive Function with a Reducing Parameter具有递减参数的递归函数的时间复杂度
【发布时间】:2022-11-19 14:18:15
【问题描述】:
int func (int n, int m)
{
if (n<1)
return n;
else if (n<10)
return func(n-m, m);
else
return func(n-1, m);
}
这就是功能。什么是大 O 表示法,我该如何计算它?我对此很陌生。
有这方面的一般规则吗?
【问题讨论】:
标签:
recursion
time
complexity-theory
reducing
【解决方案1】:
上).我也是学生,所以对此持保留态度。如果错了,我会删除这个。但我认为这是对的。
尝试查找理论并理解它,以便将其应用于所有问题。
它将需要 n-10 次循环 + n-m 次循环 + 1 次循环,这大约是 n,而在大 O 中你忽略小错误 - 例如,它更接近 n 而不是 n^2。
【解决方案2】:
这个答案来自cplusplus com中另一个叫jonnin的人。这是:
“递归只是一种循环,你用同样的方式对待它。痛点是有时很难理解循环,但你也可以写出令人讨厌的普通循环,所以这是双方的问题。
这基本上是这个循环,用于计算完成的实际工作:(如果不熟悉递归,可能需要一段时间才能看到)
而(n > 10)
n--;
如果 N < 10 则不执行任何操作,否则在 O(n) 时递减。您可以具体说明 N<10 个特殊情况,但大 O 是关于事物的一般意义,而不是血淋淋的细节。如果你想布局所有细节,就像关于一些奇异函数的 PHD 论文,你可以深入挖掘并这样做,但大多数大 O 分析是一种更粗糙的工具。作为一名教师,我会接受 O(n),因为 N>10,否则 O(1)。
如前所述,如果允许 M 为 0/负数,则永远不会结束,您也应该注意这一点。这很可能是错误的输入,不应影响答案 (?)。”