導航:首頁 > 編程語言 > php遞歸原理

php遞歸原理

發布時間:2024-03-30 18:18:00

『壹』 如何理解php中的遞歸函數 (詳細講解)

遞歸其實就是「一個函數的自調用」
在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程

拿樓主的程序來說

demo($n)內部又有調用demo($n-1),構成了「自調用」
且,$n又有一個「期望值」,即是$n>1,不滿足此條件時,該自調用終止

即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推

這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)

『貳』 php遞歸函數

很簡單,每個demo函數不考慮中間的自身遞歸,都輸出同樣的2個數$num.,這兩個數其實就是首尾對稱的的兩個數,

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

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

『肆』 php閫掑綊鏌ヨ涓嶄細錛岋紝奼傛暀銆傚氨鏄涓涓涓夌駭鍒嗙被浼犱釜ID鎵懼埌浠栫殑涓婄駭錛岃繕鏈夌埗綰с傘

榪欑嶇被鍨嬬殑鏁版嵁錛屼竴鑸鏁版嵁搴撲腑錛屼竴寮犺〃浼氭湁瀛樺湪涓や釜瀛楁碉紝涓涓鏄瀹冩湰韜玦d錛屽彟涓涓鏄瀹冪殑鐖剁駭parent_id銆
鏃㈢劧瑕佹壘鍒板畠鐨勭栫埗綰э紝sql璇鍙ヨ繖鏍峰啓錛
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id){
$sql = "select parent_id from ecs_table1 where id=" . $id錛
return($GLOBALS['db']->getone($sql ));
}
閫掑綊錛屽氨鏄鏍規嵁鐜版湁鐨剗d錛岄噸澶嶅彇銆
涓婇潰get_parent_id鍙鏄鑾峰彇鐖秈d錛屽綋鐒訛紝浣犲彲浠ュ啓涓涓鐩存帴鑾峰彇紲栫埗id鐨勫嚱鏁般
涓嶈繃錛岀幇鍦ㄥぇ閮ㄥ垎php緗戠珯錛岄兘鍙浼氭湁鑾峰彇鐖剁被鐨勫嚱鏁幫紝鎯砫iscuz錛宔cshop絳夈傝幏鍙栫栫埗id錛屽氨鏄涓嶆柇鐨勮幏鍙栬id鐨勭埗id銆

『伍』 PHP快速排序演算法實現的原理及代碼詳解

演算法原理
下列動圖來自五分鍾學演算法,演示了快速排序演算法的原理和步驟。
步驟:
從數組中選個基準值
將數組中大於基準值的放同一邊、小於基準值的放另一邊,基準值位於中間位置
遞歸的對分列兩邊的數組再排序
代碼實現
function
quickSort($arr)
{
$len
=
count($arr);
if
($len
<=
1)
{
return
$arr;
}
$v
=
$arr[0];
$low
=
$up
=
array();
for
($i
=
1;
$i
<
$len;
++$i)
{
if
($arr[$i]
>
$v)
{
$up[]
=
$arr[$i];
}
else
{
$low[]
=
$arr[$i];
}
}
$low
=
quickSort($low);
$up
=
quickSort($up);
return
array_merge($low,
array($v),
$up);
}
測試代碼:
$startTime
=
microtime(1);
$arr
=
range(1,
10);
shuffle($arr);
echo
"before
sort:
",
implode(',
',
$arr),
"\n";
$sortArr
=
quickSort($arr);
echo
"after
sort:
",
implode(',
',
$sortArr),
"\n";
echo
"use
time:
",
microtime(1)
-
$startTime,
"s\n";
測試結果:
before
sort:
1,
7,
10,
9,
6,
3,
2,
5,
4,
8
after
sort:
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
use
time:
0.0009009838104248s
時間復雜度
快速排序的時間復雜度在最壞情況下是O(N2),平均的時間復雜度是O(N*lgN)。
這句話很好理解:假設被排序的數列中有N個數。遍歷一次的時間復雜度是O(N),需要遍歷多少次呢?至少lg(N+1)次,最多N次。
1)
為什麼最少是lg(N+1)次?快速排序是採用的分治法進行遍歷的,我們將它看作一棵二叉樹,它需要遍歷的次數就是二叉樹的深度,而根據完全二叉樹的定義,它的深度至少是lg(N+1)。因此,快速排序的遍歷次數最少是lg(N+1)次。
2)
為什麼最多是N次?這個應該非常簡單,還是將快速排序看作一棵二叉樹,它的深度最大是N。因此,快讀排序的遍歷次數最多是N次。
您可能感興趣的文章:PHP快速排序演算法實例分析PHP四種排序演算法實現及效率分析【冒泡排序,插入排序,選擇排序和快速排序】PHP排序演算法之快速排序(Quick
Sort)及其優化演算法詳解PHP遞歸實現快速排序的方法示例php
二維數組快速排序演算法的實現代碼PHP常用排序演算法實例小結【基本排序,冒泡排序,快速排序,插入排序】PHP快速排序quicksort實例詳解

『陸』 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遞歸無限分類的 如何統計總條數 以及對顯示的結果進行分頁比如設置為每頁顯示10個 。

每個節點都要記錄子節點的數量c。每新增一個節點都要對各父和祖節點的子節點計數加1。這樣根節點會有總數的記錄。
這樣遞歸遍歷時也可以根據子節點數量c的來確定讀取的數量限制。比如 讀取條數計數<10 就繼續遞歸
在每個節點的表上 增加子節點的id集或計數,增加根節點到父節點路徑,會方便這些操作。

閱讀全文

與php遞歸原理相關的資料

熱點內容
spwm軟體演算法 瀏覽:184
70多歲單身程序員 瀏覽:221
高考考前解壓拓展訓練 瀏覽:217
用紙做解壓玩具不用澆水 瀏覽:584
谷輪壓縮機序列號 瀏覽:736
牛頓插值法編程 瀏覽:366
php多用戶留言系統 瀏覽:729
安卓和蘋果如何切換流量 瀏覽:703
怎麼知道dns伺服器是多少 瀏覽:976
5995用什麼簡便演算法脫式計算 瀏覽:918
電腦上如何上小米雲伺服器地址 瀏覽:921
手機資料解壓密碼 瀏覽:444
44引腳貼片單片機有哪些 瀏覽:692
阿里程序員腦圖 瀏覽:189
廣東編程貓學習班 瀏覽:708
上海數控編程培訓學校 瀏覽:313
怎麼下載我的解壓神器 瀏覽:634
lib文件無用代碼會編譯嗎 瀏覽:28
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1003
mvn命令順序 瀏覽:978