大O符号/时间复杂性问题

时间:2018-04-05 03:51:59

标签: java recursion time-complexity big-o

递归方法调用会递归调用n次(但不会出现在for循环中)并且只包含方法中的if / else语句被认为是O(N)还是O(1)?谢谢!

3 个答案:

答案 0 :(得分:0)

这是python中的阶乘代码示例。递归与循环几乎相同,这里我们一次又一次地调用阶乘函数,直到if条件满足循环中的相同。所以O(N)

def factorial( n ):
   if n <1:   # base case
       return 1
   else:
       returnNumber = n * factorial( n - 1 )  # recursive call
       print(str(n) + '! = ' + str(returnNumber))
       return returnNumber

答案 1 :(得分:0)

计算时间复杂度时,有3种类型 - 1)最好的情况 2)最坏的情况 3)平均情况

因为,你写的是O(n),这意味着你要检查最坏的情况时间复杂度,这将是 O(n)因为,我们将考虑递归存在的块最糟糕的情况。 如果您正在寻找最佳案例,可以将其视为 O(1),因为它可能无法根据if-else条件进入递归。

答案 2 :(得分:0)

这将是O(N)

进行复杂性分析的一般方法是查找所有重要的常量时间可执行语句或表达式(如比较,算术运算,方法调用,赋值),并计算出代数公式,给出它们出现的次数。然后将该公式减少到等效的大O复杂度类。

在您的情况下,方法调用很重要。

如果您有这方面的经验,您将能够省略“显然”不会对整体复杂性做出贡献的陈述。但首先,计算所有内容是一个很好的练习。