def count(n):
if n == 0 or n == 1:
return 1
else:
sum = 0
left = 0
right = 0
for x in range(1,n+1):
left = count(x-1)
right = count(n-x)
sum += left * right
return sum
我正在阅读这篇文章,我想知道 如果没有来自n个节点的不同二进制搜索树
(2n)! / ((n+1)! * n!)
来自 this 帖子。
然后
答案 0 :(得分:2)
当您致电count(n)
时,它会将count(0)
分别拨打count(n-1)
两次。
所以我认为你可以写下这样的复发:
T(n) = 2 * sum[T(0) upto T(n-1)] + nk
其中k代表乘法和求和部分。
现在考虑:
T(n+1) = 2 * sum[T(0) upto T(n)] + (n+1)k
= 2 * sum[T(0) upto T(n-1)] + 2T(n) + nk + k
= T(n) + 2T(n) + k
= 3T(n) + O(1)
解决这个问题,似乎有O(3^n)
复杂度。