PHP 中的遞迴效率

2021-09-08 08:27:47 字數 1874 閱讀 7142

php的遞迴效率一般認為是低效的。大概一年前,我寫了一篇博文,對三種遍歷樹的方法進行了比較,發現遞迴演算法的效率最低。

而且是差了3倍的效率。所以,php中的遞迴一定要小心的對待。

最近寫了乙個快速排序的演算法,發現php中的遞迴效率不能一刀切,在各種不同的伺服器中,可能會表現不一樣。

function

qsort(

&$arr)/*

** 採用遞迴演算法的快速排序。

** @param array $arr 要排序的陣列

* @param int $low  最低的排序子段

* @param int $high 最高的排序字段

*/function

_quick_sort(

&$arr

,$low

,$high)if

($low

<

$high

) while

($arr

[$low

] <=

$low_data

&&$low

<

$high

) if

($low

<

$high) }

$arr

[$low] =

$low_data;if

($prev_low

<

$low

) if

($low+1

<

$prev_high) }

function

quick_sort(

&$arr)if

($low

<

$high

) while

($arr

[$low

] <=

$low_data

&&$low

<

$high

) if

($low

<

$high) }

$arr

[$low] =

$low_data;if

($prev_low

<

$low

) if

($low+1

<

$prev_high) }

} 下面是測試速度的**:

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";

在我的iis 伺服器上(cgi)模式,我的測試結果是:

非遞迴呼叫的花費:0.036401009559631

遞迴呼叫的花費:0.053439617156982

在我的apache 伺服器上,我的測試結果是:

非遞迴呼叫的花費:0.022789001464844

遞迴呼叫的花費:0.014809131622314

結果完全相反,而php的版本是一樣的。

看來對遞迴的效率要具體問題具體分析了。

posted @

2009-11-24 13:41

暮夏 閱讀(

...)

編輯收藏

PHP 遞迴效率分析

而且是差了3倍的效率。所以,php中的遞迴一定要小心的對待。最近寫了乙個快速排序的演算法,發現php中的遞迴效率不能一刀切,在各種不同的伺服器中,可能會表現不一樣。複製 如下 function qsort arr 採用遞迴演算法的快速排序。param array arr 要排序的陣列 param i...

遞迴效率與非遞迴效率

題目1384 二維陣列中的查詢時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 10472 解決 2093 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 ...

漫談遞迴 遞迴的效率問題

遞迴在解決某些問題的時候使得我們思考的方式得以簡化,也更加精煉,容易閱讀。那麼既然遞迴有這麼多的優點,我們是不是什麼問題都要用遞迴來解決呢?難道遞迴就沒有缺點嗎?今天我們就來討論一下遞迴的不足之處。談到遞迴就不得不面對它的效率問題。為什麼遞迴是低效的 還是拿斐波那契 fibonacci 數列來做例子...