Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 以下递归函数的时间复杂度是多少 intdo(intn) { 如果(n_Time Complexity - Fatal编程技术网

Time complexity 以下递归函数的时间复杂度是多少 intdo(intn) { 如果(n

Time complexity 以下递归函数的时间复杂度是多少 intdo(intn) { 如果(n,time-complexity,Time Complexity,递归不会终止(至少在理论上,这是你可能正在谈论的),就像在你的问题中一样。原因:n+floor(sqrt(n))大于n 我想你的意思是返回Do(floor(sqrt(n))+n。我继续回答这个问题的一般考虑,但要注意:你必须自己填补一些空白 我将把有关运行时间的问题分为两部分: 最重要的是:在基本情况之前有多少个递归 如何组合所有递归 递归次数:将n写成2的幂(即n=2^(ld n),其中ld表示以2为底的对数)。分别取n的平方根将指数减半。为了达到基本情况,我们必须将指数减半,直到它小于1

递归不会终止(至少在理论上,这是你可能正在谈论的),就像在你的问题中一样。原因:
n+floor(sqrt(n))
大于
n

我想你的意思是
返回Do(floor(sqrt(n))+n
。我继续回答这个问题的一般考虑,但要注意:你必须自己填补一些空白

我将把有关运行时间的问题分为两部分:

  • 最重要的是:在基本情况之前有多少个递归
  • 如何组合所有递归

递归次数:将
n
写成2的幂(即
n=2^(ld n)
,其中
ld
表示以2为底的对数)。分别取
n
的平方根将指数减半。为了达到基本情况,我们必须将指数减半,直到它小于1。这就引出了一个问题:我们需要多长时间将ldn减半,直到我们达到某个值,取任意数字n,n=2^k。n的平方根表示指数减半。因此,只有O(logk)平方根


n=2^k因此k=logn。然后O(logk)变成O(loglogn).

这个问题似乎离题了,因为它是关于家庭作业的。返回中缺少一个括号。我们不会为您做家庭作业。
int Do(int n)
{
 if(n<=2)
  return 1;
 else
 return(Do(floor(sqrt(n))+n);
}
T(n) = T(2^(ld 2))
     = T(2^((ld 2)/2)) + 1
     = T(2^((ld 2)/4)) + 1 + 1
     = ...
     = T(2^((ld 2)/(2^(ld ld 2)))) + sum(1, i=0...(ld ld 2)-1)
     = 1 + (ld ld 2) - 1