導航:首頁 > 源碼編譯 > php遞歸演算法經典實例

php遞歸演算法經典實例

發布時間:2023-03-29 01:49:52

『壹』 php用函數遞歸計算1的平方+2的平方+……+20的平方和

遞歸:

function square_sum($n, &$sum = 0){ if ($n >= 1) { $sum += $n*$n; $n--; square_sum($n, $sum); } return $sum;}echo square_sum(5);//55

非遞歸:

function square_sum($n){ $sum = 0; for ($i=1; $i <= $n; $i++) $sum += $i*$i; return $sum;}echo square_sum(5);//55

『貳』 用php實現1+(1+2)+(1+2+3)+...+(1+2+...n) 遞歸求和

function getSum($n) {
if ($n > 1) {
$tempSum = $n * (1 + $n) / 2; // 當然這此消部分可以拆成另一個遞歸來求和,派扒高如果有需要在說塵尺
return $tempSum + getSum(--$n);
}
else {
return $n;
}
}
$result = getSum(20);

『叄』 php 遞歸問題

第一,沒有選擇資料庫,在連接資料庫後添加mysql_select_db("資料庫名");
第二、我感覺不代碼不全吧,因為我拷下來看了一下,少一},當然上面那個沒少,補充的少了。
第三、還有沒看出這個$ii是干什麼用的。
第四、沒感覺$selec=0與不等於0輸出有什麼不同。
第五、以後最好是把html代碼與程序分開寫。
因為不知道需求,只能根據你的程序簡單修改如下:
<?php
function TreeMenu($selec) {
$Conn=mysql_connect("localhost","kk","kk123");
mysql_select_db("資料庫名");
$ii=1;
$sql="select * from tvmenu where bid=".$selec;
$result=mysql_query($sql,$Conn);
$str = "";
while($row =mysql_fetch_array($result)) {
if($selec=0) {

$str = '<option value="'.$row['id'].'">'.$row['name'].'></option> ';

}else {

$str = '<option value="'.$row['id'].'">'.$row['name'].'></option> ';

}
echo $str;
$ii++;
TreeMenu($row['id']);
$ii--;
}
}
?>

<select name="bid" id="bid">
<?php
TreeMenu(0);
?>
</select>

『肆』 常見的php排序演算法

常見的php排序演算法

本文匯總了常見的php排序演算法,在進行演算法設計的時候有不錯的借鑒價值。現分享給大家供參考之用。具體如下:

一、插入排序

用文字簡單的描述,比如說$arr = array(4,2,4,6,3,6,1,7,9); 這樣的一組數字進行順序排序:

那麼,首先,拿數組的第二個元素和第一元素比較,假如第一個元素大於第二元素,那麼就讓兩者位置互換,接下來,拿數組的第三個元素,分別和第二個,第一個元素比較,假如第三個元素小,那麼就互換。依次類推。這就是插入排序,它的時間頻度是:1+2+...+(n-1)=(n^2)/2。則它的時間復雜度為O(n^2).

php實現代碼如下:

<?phpfunction Sort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=1;$i<$count;$i++){ tmp="$arr[$i];" j="">=0&&$arr[$j]<$arr[$i]){ return="">

二、選擇排序

選擇排序用語言描述的話,可以這樣,如:$arr = array(4,3,5,2,1);

首先,拿第一個和後面所有的比,找出最小的那個數字,然後和第一個數組互換(當然,如果是第一個最小,那麼就不用互換了),接著循環,即:拿第二個和後面的比較,找出最小的數字,然後和第二個數字互換,依次類推,也就是說每次都是找出剩餘最小的值。 可得到:第一次,時間頻度 是n, (第一個和後面的n-1個比較,找到最小的,再看是不是第一個,不是第一個的話進行互換) 在往後,依次是 減一 。 它的時間復雜度,也是O(n^2);

php實現代碼如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ $min=$i; for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $min = $j; //找到最小的那個元素的下標 } } if($min!=$i){//如果下標不是$i 則互換。 $tmp= $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $tmp; } } return $arr; }?>

三、冒泡排序

冒泡排序其實上是和選擇排序相比,並無明顯差別。都是找到最小的,放到最左端。依次循環解決問題。差別在於冒泡排序的交換位置的次數較多,而選擇排序則是找到最小的元素的下標,然後直接和最左端的交換位置。

php實現代碼如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $tmp= $arr[$i]; $arr[$i] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; }?>

四、快速排序

快速排序,用語言來形容的話,從數組中選擇一個值$a,然後和其餘元素進行比較,比$a大的放到數組right中,反之,放到數組left中。然後將left right 分別進行遞歸調用,即:再細分left right ,最後進行數組的合並。

php實現快速排序:

<?phpfunction mySort($arr){ $count = count($arr); if($count<2){ return $arr; } $key = $arr[0];//選擇第一個元素作為比較元素,可選其他 $left = array(); $right = array(); for($i=1;$i<$count;$i++){ key="">=$arr[$i]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = mySort($left); $right = mySort($right); $result = array_merge($left,$right); return $result; }?>

五、歸並排序

其實歸並排序是一種拆分,合並的思想。和快速排序思想有共通之處,左邊一堆,右邊一堆,然後進行合並。通過遞歸實現排序。 區別之處呢? 他們的區別也是思想上本質的區別,快速排序的拆分,是選擇了特定的值進行大小比較,從而分為left 和 right 。也就是小的一堆放入left,大的一堆放入right。而後,小的left 再細分為left1 right1。。。。通過進行類似的遞歸完成排序。也就是說,一直細分下去,遞歸最末尾的left1就是最小值。

而歸並排序,是從幾何上的左右切分,一直遞歸切分成2或者1的'最小粒度的數組,然後才開始進行比較大小,然後合並。此處的比較大小是:兒子left的元素 和兒子的right元素 進行比較,而後進行排序合並成為父親left或者right。在此,直到拿到各自排序合並完成最後兩個數組:最起初的left 和right,也僅僅直到他們各自的順序,並不能確認整個數組的順序,還是需要通過最終的left right 比較後合並才能完成真正意義上的排序。

<?phpfunction gbSort($arr){ if(count($arr)<=1){return min="floor(count($arr)/2);//取中間數字進行拆分" left="gbSort($left);" right="gbSort($right);" return="" function="">$right[0] ? array_shift($right) : array_shift($left); //進行比較,小的移除,並且放入到數組$m中。 } return arr_merge($m,$left,$right);//進行合並(由於不知道left right 哪個會為空,所以進行統一合並)}?>

六、堆排序

本例中fixDown函數實現對某一個節點的向下調整,這里默認的是起始節點為1,方便計算父子節點關系

注:

起始節點為1的父子關系: 父節點k, 子節點為2K、2k+1 子節點j, 父節點為 floor(j/2) floor為向下取整

起始節點為0的父子關系: 父節點k, 子節點為2K+1, 2k+2 子節點j, 父節點為 floor((j-1)/2)

參數$k為調整點位置, $lenth為數組長度,也就是從1起始到最後一個節點的坐標.

<?phpfunction fixDown(&$arr, $k, $lenth){while(2*$k<=$lenth) { //只要當前節點有子節點, 就需要繼續該循環 $j = $k*2; if ($j<$lenth && $arr[$j]<$arr[$j+1]) $j++; // 只要子節點有右節點,且右節點比左節點大,那麼切換到右節點操作。 if ($arr[$j] < $arr[$k]) break; // 如果子節點都沒有父節點大, 那麼調整結束。 exch($arr[$j], $arr[$k]); $k = $j; }}function exch(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp;}function headSort(&$arr){ $len = count($arr); array_unshift($arr, NULL); for($i=$len/2;$i>=1;$i--) { fixDown($arr, $i, $len); } while($len>1) { exch($arr[1], $arr[$len]); fixDown($arr, 1, --$len); } array_shift($arr);}$arr = array(4,6,4,9,2,3);headSort($arr);?>

希望本文所述排序演算法實例對大家的php程序設計有所幫助。

;

『伍』 php,使用遞歸的方式求0-n之間所有整數和

可以這樣操作:

<?php

functionadd($max,$sum=0)
{
if($max!=0){
$sum+=$max;
returnadd($max-1,$sum);
}
return$sum;
}

echoadd(100);
//輸出5050,就是0到100之間所有整數的和。

『陸』 php 幾種常用的遞歸 無限極分類

/**
*遞歸實現無限極分類
*@param$array分類數據
*@param$pid父ID
*@param$level分類級別
*@return$list分好類的數組直接遍歷即可$level可以用來遍歷縮進
*/

functiongetTree($array,$pid=0,$level=0){

//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static$list=[];foreach($arrayas$key=>$value){//第一次遍歷,找到父節點為根節點的節點也就是pid=0的節點
if($value['pid']==$pid){//父節點為根節點的節點,級別為0,也就是第一級
$value['level']=$level;//把數組放到list中
$list[]=$value;//把這個節點從數組中移除,減少後續遞歸消耗
unset($array[$key]);//開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
getTree($array,$value['id'],$level+1);

}
}

『柒』 php遞歸的方法求和1+2+3+...+n

php遞歸碼和求和冊或1+2+3+...+n的方法如州模伍下:
function sum($n) {
if ($n == 1) {
return 1;
}
return $n + sum($n - 1);
}
echo sum(n);

『捌』 求PHP 遞歸的寫法

function style($id,$i){
static $i;
$sql="select * from sort where id=".$id;
$rs1=mysql_query($sql);
while($rsd=mysql_fetch_array($rs1)){
style($rsd['type_id'],++$i);
}
return $i;
}

『玖』 PHP 如何遞歸演算法

一般來說,類似這種遍歷輸出所有文件,大多採用遞歸演算法,這樣程序顯得比較簡潔,其實際執行效率來說,並不見得比其他方法更好。

以下是示例:

function file_list($path)
{
if ($handle = opendir($path))//打開路徑成功
{
while (false !== ($file = readdir($handle)))//循環讀取目錄中的文件名並賦值給$file
{
if ($file != "." && $file != "..")//排除當前路徑和前一路徑
{
if (is_dir($path."/".$file))
{
// echo $path.": ".$file."<br>";//去掉此行顯示的是所有的非目錄文件
file_list($path."/".$file);
}
else
{
echo $path.": ".$file."<br>";
}
}
}
}
}

『拾』 PHP:數值數組疊加的遞歸方法

-數值數組疊加的遞歸方法:幾個相同格式的數組的對枝唯應項疊猛御培加,得到一個此種格拆悔式的數組
-@param array(數組1, 數組2, ...)
-@return array 數組為上面數組1,數組2,...的對應項疊加

閱讀全文

與php遞歸演算法經典實例相關的資料

熱點內容
介紹單片機外設的書籍推薦 瀏覽:56
通達信雙柱擒牛指標源碼 瀏覽:467
內存太大解壓失敗怎麼辦 瀏覽:441
linuxmakefile解析 瀏覽:777
單片機原理與應用李林功 瀏覽:39
pythonorm框架有哪些 瀏覽:431
indesign轉pdf 瀏覽:483
javaweb找源碼 瀏覽:26
浪潮物理伺服器如何重啟 瀏覽:602
aes加密性能下降 瀏覽:449
linux驅動結構 瀏覽:868
psv安裝壓縮包 瀏覽:613
錦州聯通DNS伺服器地址 瀏覽:115
伺服器佔用太多的網路怎麼辦 瀏覽:936
設置ftp共享文件夾win10 瀏覽:793
伺服器和主機是什麼意思 瀏覽:638
自製透明收納文件夾 瀏覽:164
testflight怎麼下載安卓軟體 瀏覽:180
androidstudio替換字元 瀏覽:824
學python用途 瀏覽:528