【问题标题】: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/负数,则永远不会结束,您也应该注意这一点。这很可能是错误的输入,不应影响答案 (?)。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-29
        • 2018-08-18
        • 1970-01-01
        相关资源
        最近更新 更多