您实际上不需要循环来进行等差数列。像这样的等差数列可以通过公式n * (n[-1] + n[1]) / 2
在常数时间内计算出来。
例如,4的等差数列,其中 n1 = 1
,n2 = 2
,n3 = 3
,和 n4 = 4
,只需4 * (4 + 1) / 2 == 10
即可。
function progression($n) {
return $n * ($n + 1) / 2;
}
echo progression(4); // 10
然而,要在任何给定步骤显示进度的结果,您只需限制该进度的上限(即
$n
)。
$n = 4;
for ($i = 1; $i <= $n; $i++) {
$operands = implode('+', range(1, $i));
echo $operands . " = " . progression($i), "\n";
}
输出
1 = 1
1+2 = 3
1+2+3 = 6
1+2+3+4 = 10
概括
这适用于任何线性算术级数,不论上限/下限如何。例如,通过5到8的级数仍为4 * (5 + 8) / 2
,得出26
。
因此,您可以将此函数修改为更通用的解决方案,以适用于任何线性算术级数。
function progression($size, $start = 1) {
return $size * ($start + ($size + $start - 1)) / 2;
}
$n = 4;
$start = 5;
for ($i = $start; $i <= $n + $start - 1; $i++) {
$operands = implode('+', range($start, $i));
echo $operands . " = " . progression($i - $start + 1, $start), "\n";
}
输出
5 = 5
5+6 = 11
5+6+7 = 18
5+6+7+8 = 26
$i
添加到数组中。然后您想使用implode()
打印计算结果,并使用array_sum()
获取结果。 - Rizier123range()
函数感兴趣。执行$nums = range(1, $num);
将给你一个整数数组。 - gen_Eric