Time complexity 函数的递归关系是什么,因此它的时间复杂性是什么?

Time complexity 函数的递归关系是什么,因此它的时间复杂性是什么?,time-complexity,recurrence,Time Complexity,Recurrence,当常数“a”不存在时,我可以写一个递归关系,但我有点困惑,因为“a”和“n”可以有任何值,因此两者都应该出现在递归关系中 void fun(int n) { if(n<a) { printf("%d ",n); fun(n*2); } } void fun(int n) { 如果(n假设a是一个常数,我们可以假设c是另一个常数: T(n)=T(n*2)=T(n*4)=…T(n*(2^i)) n*(2^i)2^iii

当常数“a”不存在时,我可以写一个递归关系,但我有点困惑,因为“a”和“n”可以有任何值,因此两者都应该出现在递归关系中

void fun(int n)
{
     if(n<a)
     {
          printf("%d ",n);
          fun(n*2);
     }

}
void fun(int n)
{

如果(n假设a是一个常数,我们可以假设c是另一个常数:

  • T(n)=T(n*2)=T(n*4)=…T(n*(2^i))
  • n*(2^i)2^iii
所以

T(n)=T(n*c)


因此,fun的运行时间是恒定的,无论a有多大。

如果a是一个常数,我们可以假设c是另一个常数:

所以

T(n)=T(n*c)


因此,无论a有多大,fun的运行时间都是恒定的。

对于所有n>a,对于某些常数c,T(n)=c(因为在这种情况下没有递归调用),所以T(n)=O(1)。

对于所有n>a,T(n)=c对于某些常数c(因为在这种情况下没有递归调用),所以T(n)=O(1)运行时间不应该是O(log(a)-log(n))?是的,你可以这么说。但是
log(a)
是一个常数,它也减少了
log(n)
,这使得总运行时间依赖于a(以log(a)为上限)。输入大小的增长不会影响运行时间,因此,运行时间是恒定的。运行时间不应该是O(log(a)-log(n))?是的,你可以这么说。但是
log(a)
是一个常数,它也会减少
log(n)
,这使得总运行时间依赖于a(由log(a)确定的上限).输入大小的增长不会影响运行时间,因此,运行时间是恒定的。