为我提供了一个伪代码来查找递归关系和渐近约束,对于我的一生,我什至不知道该如何尝试并理解如何应对。
Calc_a(n):
if n==1:
return 1
sum = 0
for i = 1 to n−1
sum = sum + calc_a(i)
return sum
首先,正如我所说,我被要求为此代码找到一个递归关系公式,然后我尝试通过遵循代码对一些输入的作用来解决它。 我认为它返回的是上次返回的数量的两倍。 (除非是1和2,否则两者都返回1)。
所以我心想-可能是这样的:
T(n) = 2*T(n-1) + c
因为返回的总和等于调用该方法的次数,所以我添加了c
作为常量,以显示每次迭代完成的“一行工作”的数量。 (即if-else和sum =行)。
问题在于,这与他们在第二部分中要求我执行的操作不匹配:
为关系Hint:look both at T(n) and at T(n + 1) at the same time
但是根据我发现的关系,很容易证明它是Omega(2^n)
,也不难证明它是BigO(2^n)
。
有帮助吗?提前致谢。 :)