给定函数的复杂度是多少[重复]

Posted

技术标签:

【中文标题】给定函数的复杂度是多少[重复]【英文标题】:What is the complexity of the given function [duplicate] 【发布时间】:2021-10-01 10:59:00 【问题描述】:

有人能告诉我函数的复杂性是什么吗?为什么? 谢谢

def func1(n):
    if n==0:
        return (1)
    if n==1:
        return (1)
    if n==2:
        return (2)
    return (n*func1(n-3))

n=int(input())
func1(n)

我认为复杂度是:“O(nlog n)”

【问题讨论】:

对于所有肯定的ns,循环最多会有n / 3 迭代(你有一个尾递归)。然而,这仍然是线性时间 - O(n)。 @JanezKuhar,这是不是尾递归(但接近)。最后一个操作不是调用func1(),而是乘以n 你通常会写return 1,而不是return (1) 【参考方案1】:

函数的时间复杂度为 O(n),因为 n - 3 是线性的。如果是除法运算,则为 O(logn)。进一步解释可以参考this。

附:与 n 相乘本身不会影响每个递归调用中的给定参数,因此它根本不会影响时间复杂度。

【讨论】:

以上是关于给定函数的复杂度是多少[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 n 个元素生成长度为 r 的组合而不重复或排列的函数的时间复杂度是多少?

函数的时间复杂度是多少?

以下代码片段的时间复杂度是多少?

在 MongoDB 中,查找所有行 ID 不在给定列表中的记录的查询时间复杂度是多少?

Python list.clear复杂性[重复]

我的算法的复杂性[重复]