小人物大英雄 发表于 2005 年 10 月 14 日 13:26:30

两段代码的执行速度测试~~

今天偶然想到一个有趣的测试,使用while或者for等很容易构成循环体,而使用函数自身调用也可以构成循环体,哪种更快呢?


<?php
$timestamp = time();
$mtime = explode(' ', microtime());
$starttime = $mtime + $mtime;

while($a <100){
  echo $a." ";
  $a++;
}

$mtime = explode(' ', microtime());
$totaltime = number_format(($mtime + $mtime - $starttime), 6);
echo "<br>".$totaltime."<br>";

?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
0.000286

<?php

$timestamp = time();
$mtime = explode(' ', microtime());
$starttime = $mtime + $mtime;

a();
function a($a=''){
 echo $a." ";
 $a++;
 $a<100 && a($a);
}

$mtime = explode(' ', microtime());
$totaltime = number_format(($mtime + $mtime - $starttime), 6);
echo "<br>".$totaltime."<br>";
?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
0.000587

xchange 发表于 2005 年 10 月 14 日 13:52:36

递归需要堆栈,需要的内存更大

具体原理不懂,以上纯属猜测

小人物大英雄 发表于 2005 年 10 月 14 日 16:58:39

我后来又测试了下,在循环次数较小的时候反而函数递归执行效率更快,看来的确是由于函数递归形成未能自动释放内存的堆影响了多次循环的效率了~

oghuz 发表于 2005 年 10 月 14 日 18:17:07

不懂   帮顶

chinasaint 发表于 2005 年 10 月 15 日 02:17:55

下面是引用oghuz于2005-10-14 18:17发表的:
不懂   帮顶

姜运涛 发表于 2005 年 10 月 15 日 08:06:22

学习了
心雨动网的无限分类是如何实现的呢?
也是递归吗?
小白同学

小人物大英雄 发表于 2005 年 10 月 15 日 08:26:53

下面是引用姜运涛于2005-10-15 08:06发表的:
学习了
心雨动网的无限分类是如何实现的呢?
也是递归吗?
小白同学

定义了一个类,递归和循环都有使用的~所以想起测试下速度

xchange 发表于 2005 年 10 月 15 日 08:45:53

涛涛在偷技术

姜运涛 发表于 2005 年 10 月 15 日 10:01:21

下面是引用xchange于2005-10-15 08:45发表的:
涛涛在偷技术

你不說的話是不是小白就全告訴我了?
不BS你你就會不爽

xchange 发表于 2005 年 10 月 15 日 10:14:25

居然打出繁体字来……诡异啊……
页: [1] 2 3
查看完整版本: 两段代码的执行速度测试~~