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 數列來做例子...