Python 两个简单递归函数的Big-O表示法

Python 两个简单递归函数的Big-O表示法,python,algorithm,math,recursion,big-o,Python,Algorithm,Math,Recursion,Big O,我在Python中有两个递归函数,只是想知道它们的大O表示法。每一个的大O是什么 def cost(n): if n == 0: return 1 else: return cost(n-1) + cost(n-1) def cost(n): if n == 0: return 1 else: return 2*cost(n-1) 让我们使用递归关系来解决这个问题!第一个函数的运行时可以递归地描述

我在Python中有两个递归函数,只是想知道它们的大O表示法。每一个的大O是什么

def cost(n):
    if n == 0:
        return 1
    else:
        return cost(n-1) + cost(n-1)

def cost(n):
    if n == 0:
        return 1
    else:
        return 2*cost(n-1)

让我们使用递归关系来解决这个问题!第一个函数的运行时可以递归地描述为

T(0)=1

T(n+1)=2T(n)+1

也就是说,基本情况需要一个时间单位才能完成,否则我们将对问题的较小实例进行两次递归调用,并进行一些设置和清理工作。在这个循环中展开一些术语,我们得到

  • T(0)=1
  • T(1)=2T(0)+1=2+1=3
  • T(2)=2T(1)+1=2×3+1=7
  • T(3)=2T(2)+1=2×7+1=15
这个系列1,3,7,15。。。可能看起来很熟悉,因为它是21-1、22-1、23-1等等。更一般地说,我们可以证明这一点

T(n)=2n+1-1

我们可以通过归纳法来做到这一点。作为我们的基本情况,T(0)=1=21-1,因此索赔适用于n=0。现在假设对于一些n,T(n)=2n+1-1。那我们就有了

T(n+1)=2T(n)+1=2(2n+1-1)+1=2n+2-2+1=2n+2-1

我们完了!因为这个循环的结果是2n+1-1=2(2n)-1,所以我们知道运行时是Θ(2n)

第二个函数的运行时可以递归地描述为

T(0)=1

T(n+1)=T(n)+1

扩展一些术语:

  • T(0)=1
  • T(1)=T(0)+1=1+1=2
  • T(2)=T(1)+1=2+1=3
  • T(3)=T(2)+1=3+1=4
这就得到了1,2,3,4,…,所以更一般地说,我们可以猜测

T(n)=n+1

我们可以再次归纳地证明这一点。作为基本情况,如果n=0,则T(0)=1=0+1。对于归纳步骤,假设对于某些n,T(n)=n+1。然后

T(n+1)=T(n)+1=n+1+1=n+2

我们完了!因为运行时是n+1,所以运行时是Θ(n)


希望这有帮助

使用递归树(通过可视化图表)查找成本。

函数代价的递推关系(n)


类似的方法,我们可以找到第二个函数的时间复杂度。

我认为第一个是O(2^n),第二个是O(n)。如果你解释一下你是如何得出这些O的,我会把它作为一个答案,似乎应该添加一个关于记忆的注释,它可以将指数运行时间缩短为线性。这是一个史诗般的答案。这很有帮助。你能给我指出一些类似的空间分析方法吗?很好的方法!然而,直到我读到另一个网站解释了你所描述的重复关系,我才完全理解这个方法。只是把链接放在这里,以防它对任何人都有帮助。
                    T(n) = 2T(n-1)+c
If at kth level input size become 0 (base condition where func terminates)
                                           n-k =0
                                              k=n


Total cost of the function (adding cost of each level) :
             T(n) = 2^0*c+ 2^1*c + 2^2*c + 2^3*c +.. .. . .+ 2^n * c
                  = O(2^n)