Python 两个简单递归函数的Big-O表示法
我在Python中有两个递归函数,只是想知道它们的大O表示法。每一个的大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) 让我们使用递归关系来解决这个问题!第一个函数的运行时可以递归地描述
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
- 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
希望这有帮助 使用递归树(通过可视化图表)查找成本。 函数代价的递推关系(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)