遞歸函數:
自己調用自己, 必須要有結束條件。
function digui($n){
echo $n;
if($n>0){
digui($n-1);
}else{
echo'---------';
}
echo $n;
}
digui(3); 輸出結果 3210--------0123;
菲波那切數列:
n代表第幾列,f(n)代表第n列的值。
// n 1 2 3 4 5 6 7 ......
// f(n) 1 1 2 3 5 8 13 ......
// f(n) = f(n-1) + f(n-2);
function feibo($n){
if($n ==1 ){
return 1;
}elseif($n == 2)
{
return 1;
}
return feibo($n-1) + feibo($n-2);
}
echo feibo(5); 輸出結果是5;
遞歸無限極分類:
$address = [
['id'=>1,'name'=>'昌平','pid'=>2],
['id'=>2,'name'=>'北京','pid'=>0],
['id'=>3,'name'=>'回龍觀','pid'=>1],
['id'=>4,'name'=>'通州','pid'=>2],
['id'=>5,'name'=>'潞城','pid'=>4],
['id'=>6,'name'=>'山東','pid'=>0],
['id'=>7,'name'=>'南村鎮','pid'=>8],
['id'=>8,'name'=>'市南區','pid'=>9],
['id'=>9,'name'=>'青島市','pid'=>6],
['id'=>10,'name'=>'市北區','pid'=>9],
];
//子欄目
function findSon($arr,$id=0)
{
$subs=[];
foreach($arr as $v){
if($v['pid']==$id){
$subs[]=$v;
}
}
return $subs;
}
print_r(findSon($address,0));
//子孫欄目
function subtree($arr,$id=0,$lev=1)
{
$subs=[];
foreach($arr as $v){
if($v['pid']==$id){
$v['lev']=$lev;
$subs[]=$v;
$subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));
}
}
return $subs;
}