【发布时间】:2020-04-08 21:43:44
【问题描述】:
谁能建议以下代码的空间和时间复杂度? 我知道时间复杂度应该是 O(n) 因为函数被调用 n 次,空间复杂度至少是 O(n) (因为堆栈空间),但是将 a[1:] 传递给函数会导致空间复杂度增加?我认为 a[1:] 会在省略第一个元素的同时创建 a 的新副本,对吗?
def sum(a):
if len(a) == 1:
return a[0]
return a[0] + sum(a[1:])
【问题讨论】:
-
" 我知道时间复杂度应该是 O(n),因为函数被调用了 n 次," 不是。当然,该函数被调用 N 次,所以它至少 O(N)...但是您正在函数中执行某些操作,不是吗?这不是恒定的时间。所以它不会是 O(N)...所以是的,你是对的
a[1:]。结果是你的时间复杂度是 O(N**2)
标签: python performance recursion time-complexity space-complexity