我在开发算法的递归关系方面遇到了困难。这是我给出的算法:
int result = silly (n);
public static int silly (int n)
{
if (n <= 1)
{
return -100;
}
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += i;
}
return sum + silly (n-2);
}
我理解基本情况是
T(1) = 1
,但不明白T(n)是什么。会不会是
T(n) = n[T(n-2) + 1]
答案 0 :(得分:1)
你已经非常接近正确的复发,但你所拥有的有点过时了。
通常来说,递归关系将完成的工作分为两部分:
那么让我们看看这个功能是做什么的。你是正确的,因为大的for循环,在一次调用中完成的工作是O(n)。这意味着我们有类似
的东西T(n)= ________ + O(n)
您填充空白的位对应于单个函数触发的递归调用。在这种情况下,每个函数调用都会触发一个额外的递归调用,其输入的大小为n - 2,因此重现将是
T(n)= T(n-2)+ O(n)
你提出的答案基本上是
T(n)= nT(n-2)+ O(n)
是接近的,但是会超过最终获得的递归调用的数量。写nT(n - 2)作为重复发生的一部分意味着从单个调用中有