我们在实际代码编程中,会发现PHP递归效率是非常低下的,对于程序员来说,他们必须要很好的处理PHP的递归。在这篇文章中我们具体向大家介绍了PHP递归效率的提高方法,希望对又需要的朋友有所帮助。

成都创新互联专注于黄平网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供黄平营销型网站建设,黄平网站制作、黄平网页设计、黄平网站官网定制、小程序定制开发服务,打造黄平网络公司原创品牌,更为您提供黄平网站排名全网营销落地服务。
最近写了一个快速排序的算法,发现PHP中的递归效率不能一刀切,在各种不同的服务器中,可能会表现不一样。
- function qsort(&$arr)
 - {
 - _quick_sort($arr, 0, count($arr) - 1);
 - }
 - /**
 - * 采用递归算法的快速排序。
 - *
 - * @param array $arr 要排序的数组
 - * @param int $low ***的排序子段
 - * @param int $high ***的排序字段
 - */
 - function _quick_sort(&$arr, $low, $high)
 - {
 - $low_data = $arr[$low];
 - $prev_low = $low;
 - $prev_high = $high;
 - while ($low < $high)
 - {
 - while ($arr[$high] >= $low_data && $low < $high) {
 - $high--;
 - }
 - if ($low < $high) {
 - $arr[$low] = $arr[$high];
 - $low++;
 - }
 - while ($arr[$low] <= $low_data && $low < $high) {
 - $low++;
 - }
 - if ($low < $high) {
 - $arr[$high] = $arr[$low];
 - $high--;
 - }
 - }
 - $arr[$low] = $low_data;
 - if ($prev_low < $low) {
 - _quick_sort($arr, $prev_low, $low);
 - }
 - if ($low + 1 < $prev_high) {
 - _quick_sort($arr, $low + 1, $prev_high);
 - }
 - }
 - function quick_sort(&$arr)
 - {
 - $stack = array();
 - array_push($stack, 0);
 - array_push($stack, count($arr) -1);
 - while (!empty($stack)) {
 - $high = array_pop($stack);
 - $low = array_pop($stack);
 - $low_data = $arr[$low];
 - $prev_low = $low;
 - $prev_high = $high;
 - while ($low < $high)
 - {
 - while ($arr[$high] >= $low_data && $low < $high) {
 - $high--;
 - }
 - if ($low < $high) {
 - $arr[$low] = $arr[$high];
 - $low++;
 - }
 - while ($arr[$low] <= $low_data && $low < $high) {
 - $low++;
 - }
 - if ($low < $high) {
 - $arr[$high] = $arr[$low];
 - $high--;
 - }
 - }
 - $arr[$low] = $low_data;
 - if ($prev_low < $low) {
 - array_push($stack, $prev_low);
 - array_push($stack, $low);
 - }
 - if ($low + 1 < $prev_high) {
 - array_push($stack, $low + 1);
 - array_push($stack, $prev_high);
 - }
 - }
 - }
 
下面是PHP递归效率测试速度的代码:
- function qsort_test1()
 - {
 - $arr = range(1, 1000);
 - shuffle($arr);
 - $arr2 = $arr;
 - $t1 = microtime(true);
 - quick_sort($arr2);
 - $t2 = microtime(true) - $t1;
 - echo "非递归调用的花费:" . $t2 . "\n";
 - $arr1 = $arr;
 - $t1 = microtime(true);
 - qsort($arr1);
 - $t2 = microtime(true) - $t1;
 - echo "递归调用的花费:" . $t2 . "\n";
 - }
 
#t#在我的IIS 服务器上(CGI)模式,我的PHP递归效率测试结果是:
非递归调用的花费:0.036401009559631
 递归调用的花费:0.053439617156982
在我的Apache 服务器上,我的测试结果是:
非递归调用的花费:0.022789001464844
 递归调用的花费:0.014809131622314
PHP递归效率的结果完全相反,而PHP的版本是一样的。
看来对PHP递归效率要具体问题具体分析了。
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号