while 循环停止处理大数 c#

问题描述 投票:0回答:1

我的 while 循环在处理 10 000 时工作正常,但加载 100 000 时需要时间,但没有;与 10 000 000 一起工作,我不明白为什么,它是一台机器,无论数字多少,它都应该很快。所以我想我的代码中有一个错误,但对我来说,一切看起来都很好,帮助

实现这个

Console.WriteLine(SumSequenceElements(10_000_000));

static double SumSequenceElements(int n)
{
   int i = 1;
   double sum = 0;
   while (i <= n)
   {
      int j = 0;
      double power = 1;
      while (j < i + 1)
      {
         power *= -1;
         j++;
      }

      sum += power / (i * (i + 1));
      i++;
   }

   return sum;
}
c# while-loop sum big-o sequence
1个回答
0
投票
如果

(-1)^k

 为偶数,则 
+1
k
;如果
-1
为奇数,则
k
。现在,我们有
k = i + 1
。即,只要
i
是偶数,那么
k
就是奇数,反之亦然。 或者,换句话说,如果
(-1)^(i+1)
为偶数,则
-1
i
,如果
+1
为奇数,则
i

您可以通过查看除以 2 的余数来测试

int
是否为偶数。C# 的模运算符
%
会产生该余数。

static double SumSequenceElements(int n)
{
   int i = 1;
   double sum = 0;
   while (i <= n)
   {
      double power = i % 2 == 0 ? -1 : +1;
      sum += power / (i * (i + 1));
      i++;
   }

   return sum;
}

通过避免内循环,计算复杂度从O(n^2)降低到O(n),即从二次降低到线性。

© www.soinside.com 2019 - 2024. All rights reserved.