Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定递归函数的时间和空间复杂度_Python_Recursion_Time Complexity_Big O_Space Complexity - Fatal编程技术网

Python 确定递归函数的时间和空间复杂度

Python 确定递归函数的时间和空间复杂度,python,recursion,time-complexity,big-o,space-complexity,Python,Recursion,Time Complexity,Big O,Space Complexity,如何根据foo的输入n计算foo运行时间的时间复杂度?那么空间复杂性呢?让我们将其细分: def foo(n): def bar(n): if n == 0: return 0 else: return 1 + bar (n - 1) return n * bar(n) 这在时间和内存上呈线性-打开。如c所述ᴏʟᴅsᴘᴇᴇᴅ, 它在运行时和空间中都处于启用状态 让我试着用递推关系和推导来解释它 运

如何根据foo的输入n计算foo运行时间的时间复杂度?那么空间复杂性呢?

让我们将其细分:

def foo(n):
    def bar(n):
        if n == 0: 
            return 0
        else:
            return 1 + bar (n - 1)
    return n * bar(n)

这在时间和内存上呈线性-打开。

如c所述ᴏʟᴅsᴘᴇᴇᴅ, 它在运行时和空间中都处于启用状态

让我试着用递推关系和推导来解释它

运行时

空间复杂性

将为所有递归调用创建“n”堆栈。 因此,在空间上

注意:通过尾部递归实现,可以进一步降低空间复杂度


希望有帮助

请修复您的缩进。@ChristianDean尝试过吗?:OP:它在堆栈中递归了多少次?这应该给你一个关于空间和时间复杂性的线索。@AChampion-Hmm,为什么这对我不起作用:| OP在我之前做了一次编辑。刚刚选中-将其回滚,在我编辑它时,它已正确缩进,但未编码。为什么它与bar不同,步骤数为n+1,而foo为nn+1,所以时间:^2?@kiki错了。乘法是一个常数运算。n*n是一个单独的步骤。然而,计算棒的输出是线性的。
 return n * bar(n)
      → n * (1 + bar(n - 1))
      → n * (1 + 1 + bar(n - 2))
      → n * (1 + 1 + 1 + bar(n - 3))
      → n * (1 + 1 + 1 + .... <n times> + bar(0))
      → n * n
Base case: T(0) = 1
Recurion : T(n) = T(n-1) + 1  (constant time for addition operation)


T(n) = T(n-1) + 1
     = T(n-2) + 1 + 1
     = T(n-3) + 1 + 1 + 1
     = T(n-4) + 1 + 1 + 1 + 1
     = T(n-4) + 4*1
     ...
     = T(n-n) + n * 1
     = T(0) + n * 1
     = 1 + n
     = O(n)