【发布时间】:2020-10-05 07:33:48
【问题描述】:
我有一个递归函数,它接受两个变量,然后分成两个调用:
def f(n, m):
if ((n == 0) or (m == 0)):
return 1
return f(n - 1, m) + f(n, m - 1)
前三个递归调用如下所示:
f(n-2, m)
/
f(n-1, m)
/ \
/ f(n-1, m-1)
/
f(n, m)
\
\ f(n-1, m-1)
\ /
f(n, m-1)
\
f(n, m-2)
我知道拆分为两个调用的函数将具有O(2^n) 的指数时间复杂度,但我怎样才能同时包含第二个参数及其条件?
【问题讨论】:
-
传递给每个函数的内容不会改变时间复杂度。
-
查看维基百科
Master Theoremit.wikipedia.org/wiki/Teorema_principale -
@RobertHarvey 这个函数有两个参数的时间复杂度是多少?
-
你已经说过这个函数的时间复杂度是
O(2^n),为什么。我说过参数的数量并不重要(当然,除非您添加更多的函数拆分)。 -
Big O 应该是最坏的情况,而不是最好的情况。或者至少是常见的情况。如果你将项目按字母顺序放入二叉树,它的性能将是 O(n),而不是 O(log2 n)。但是没有人说二叉树中的插入性能是 O(n),因为这不是常见的情况。
标签: algorithm recursion big-o complexity-theory