灰太狼 2019-02-23 17:15:46 2220次浏览 4条回复 0 1 0

8521CA82-26FA-4968-AA26-05EEFDDDB68B.png

程序计算:1-10之间的累加总和 例如:1+2+3+4+5+6+7+8+9+10 很多人很快写出来了

$sum = 0;
$n = 100000000;
for($i = 1; $i<=$n; $i++){
    $sum = $sum + $i;
}
echo $sum;

这样写是没问题的。 同时程序还兼容了1-100的累加,只需要把$n改成100,甚至是改成,1000,10000,.....100000000(一亿)

这是程序还是可以执行的,但是会很慢很慢,测试了一下需要16秒左右。16秒啊。。。就卡着那里不动了。。。

如果换一种写法:

$n = 1000000000000;        //注意:同时我们把数值加大到1万亿,是上个程序的1万倍。
$sum = (1+$n) * $n / 2;
echo $sum.'</br>'; 

查看执行时间几乎是几十毫秒。

两种写法,其实应该叫两种算法。第一种我想是很多人常用的。 第二种有个专业名词叫:高斯算法。这么一说就有人听着耳熟了。 高斯算法:(首项+末项)*项数/2 这就是一个公式。

这些很多人都会了,只是想通过一个小小的例子就反思了,我们在写程序的时候是有考虑到性能,循环用着很爽,但你知道它在内存中是怎么开辟空间存在的么?是怎么占位的么?这些完全是影响着性能的主要因素。 有没有写了很多占用内存空间的代码?写了很耗空间的代码?

这是在看数据结构发现的数据存储相关,可以说类似的情况我们程序里肯定写了很多。

觉得很赞
您需要登录后才可以回复。登录 | 立即注册