鉴于以下递归函数,我如何计算大哦内存消耗?
def nthFib(n):
if n == 0:
return 0
elif n == 1:
return 1
return n * nthFin(n-1)
答案 0 :(得分:1)
在其峰值内存使用情况下,它有N个堆栈帧,每个帧都有一个等待倍增的因子。这需要O(N)内存。
可以使用O(1)存储器计算数字。
如果Python消除了尾递归,则以下将使用O(1)内存:
CAA6A1
如果Python的def _nthFib(acc, n):
if n == 1:
return acc
return _nthFin(acc*n, n-1)
def nthFib(n):
if n == 0:
return 0
return _nthFin(1, n)
是真正的迭代器,则以下使用O(1)内存:
range
答案 1 :(得分:0)
----------------------------------+
def nthFib(n):
if n == 0:
return 0
elif n == 1:
return 1
return n * nthFin(n-1)
-----------------------------------+
以上部分代码在O(1)时间运行。 但是您将为以下实例调用该代码:n,n-1,n-2 .... 1,0。
总共n + 1次:这意味着:O(1)* n + 1 = O(n + 1)或O(n)