使用循环计算与公式计算的区别

2009-04-19 15:49:42| 分类: PHP |字号 订阅

使用循环计算与公式计算的区别

—-连加问题分析

今天,无意中看到一道题:写一段代码,求1+2+3+……+100的结果。以前做过这样的题,不过,看到了就又想做一次。于是,就打开了编辑框,写下了以下代码:

<?php
    for($i=1;$i<=100;$i++)
    {
        $sum+=$i;
    }
    echo "result:".$sum."<br/>";
?>

结果:

result:5050
Page executed in 0.0002 seconds.

这是一个小数目的计算,因为只循环了100次,所以分别不出程序的快与慢。但当数目很大的时候,例如我把100改成1000000或者更大的数以后呢?于是,我进行了以下测试(完整代码,包括测试时间的运算):


<?PHP

       $starttimer = time()+microtime();

 

       for($i=1;$i<=1000000;$i++)

       {

              $sum+=$i;     

       }

       echo "result:".$sum."<br/>";

 

       $stoptimer = time()+microtime();

       $timer = round($stoptimer-$starttimer,4);

       echo "Page executed in $timer seconds.";

?>

结果:

result:5.000005E+11
Page executed in 0.4228 seconds.

发现,执行的时间上到了0.4228秒。是否可以提高执行的速度呢?肯定可以,换一下方法就行了。所以,我再尝试了以下方法:


<?PHP

 

       $starttimer = time()+microtime();

 

       $i=100;

       $sum=(1+$i)*$i/2;

       echo "result:".$sum."<br/>";

 

       $stoptimer = time()+microtime();

       $timer = round($stoptimer-$starttimer,4);

       echo "Page executed in $timer seconds.";

?>

结果:

result:5050
Page executed in 0.0001 seconds.

循环100次是这样,现在换大一点的数:


<?PHP

 

       $starttimer = time()+microtime();

 

       $i=10000000000;

       $sum=(1+$i)*$i/2;

       echo "result:".$sum."<br/>";

 

       $stoptimer = time()+microtime();

       $timer = round($stoptimer-$starttimer,4);

       echo "Page executed in $timer seconds.";

?>

结果:

result:5.0000000005E+19
Page executed in 0.0002 seconds.

为什么执行大的数据时会有如此大的区别呢?因为for循环很费时间,而使用数学公式,它只需要运算一下,而不必循环,也就减少了代码运行的时间。

以上是双数的相加,如果位数是单数的话,公式如下:

$sum=(1+$i-1)*$i/2+$i;

如果首位不是1的情况,又是如何?请看:

$sum=($first+$last)*($last-$first+1)/2; //位数为双的

$sum=($first+$last-1)*($last-$first)/2+$last; //位数为单的

This entry was posted in 应用. Bookmark the permalink.

发表评论