我的 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;
}
(-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),即从二次降低到线性。