给定函数的复杂度是多少[重复]
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)”
【问题讨论】:
对于所有肯定的n
s,循环最多会有n / 3
迭代(你有一个尾递归)。然而,这仍然是线性时间 - O(n)。
@JanezKuhar,这是不是尾递归(但接近)。最后一个操作不是调用func1()
,而是乘以n
。
你通常会写return 1
,而不是return (1)
。
【参考方案1】:
函数的时间复杂度为 O(n),因为 n - 3 是线性的。如果是除法运算,则为 O(logn)。进一步解释可以参考this。
附:与 n 相乘本身不会影响每个递归调用中的给定参数,因此它根本不会影响时间复杂度。
【讨论】:
以上是关于给定函数的复杂度是多少[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 n 个元素生成长度为 r 的组合而不重复或排列的函数的时间复杂度是多少?