如果一个递归的解决方案最终连续调用自己,比如N次,那么在返回一个级别之前,空间效率最多是O(N),因为N个调用中的每一个都占用了一定量的堆栈空间。
这是否也意味着时间效率最多也是O(N),因为递归函数中的代码类似于内部循环代码运行~N次?
答案 0 :(得分:2)
除了@ Ben的回答之外,还有“tail recursion”的情况,其中当前堆栈帧被移除并被被调用者的堆栈帧替换,但仅当调用者的最后一个操作是返回结果时一个被叫者。当以完全功能的语言实现时,这可能导致O(n)时间函数具有O(1)空间。
答案 1 :(得分:1)
不,但是你的观察有一些道理 - 基本上如果你知道任何算法(递归或其他,因为我们不区分这两个;并且没有任何真正可以区分它们的东西,它更像是对于给定问题而言,空间复杂度至少为f(n)
,它的时间复杂度至少为f(n)
。
答案 2 :(得分:0)
不,因为递归算法的每一步都需要比O(1)更长的时间。如果每个步骤取O(n)则总时间复杂度为O(n ^ 2)。