什么是递归函数
递归函数即自调用函数,也就是函数在函数体内部直接或间接地自己调用自己。需要注意的是使用递归函数时通常会在函数体中附加一个判断条件,以判断是否需要继续执行递归调用,当条件满足时会终止函数的递归调用。
例1
function test($int)
{
if ($int <= 1) {
return 1;
}
return $int * test($int - 1);
}
echo test(5); //结果120
例2:计算斐波那契数列
斐波那契数列数列如下所示:
1、1、2、3、5、8、13、21、34、55…
斐波那契数列列由大于1开始,之后的斐波那契数列系数就由之前的两数相加
顺着递归思路去想, f(1) = 1; f(2) = 1 ; f(3) = f(2)+f(1) 【2】 f(4) = f(3)+f(2) 【3】
function test($num)
{
if ($num == 1 || $num == 2) {
return 1;
} else {
return test($num - 1) + test($num - 2);
}
}
test(10);
输出的结果是55.
例3:
需要处理的数组
$arr = [
1=>['id'=>1,'name'=>'父1','pid'=>0],
2=>['id'=>2,'name'=>'父2','pid'=>0],
3=>['id'=>3,'name'=>'父1-1','pid'=>1],
4=>['id'=>4,'name'=>'父1-2','pid'=>1],
5=>['id'=>5,'name'=>'父2-1','pid'=>2],
6=>['id'=>6,'name'=>'父1-1-1','pid'=>4],
];
执行方法:
function getTree($arr, $id) {
$tree=[];
foreach ($arr as $val) {
if($val['pid'] == $id) {
$val['son'] = getTree($arr, $val['id']);
$tree[]= $val;
}
}
return $tree;
}
$tree = getTree($arr, 0);
var_dump($tree);
输出的结果:
^ array:2 [▼
0 => array:4 [▼
"id" => 1
"name" => "父1"
"pid" => 0
"son" => array:2 [▼
0 => array:4 [▼
"id" => 3
"name" => "父1-1"
"pid" => 1
"son" => []
]
1 => array:4 [▼
"id" => 4
"name" => "父1-2"
"pid" => 1
"son" => array:1 [▼
0 => array:4 [▼
"id" => 6
"name" => "父1-1-1"
"pid" => 4
"son" => []
]
]
]
]
]
1 => array:4 [▼
"id" => 2
"name" => "父2"
"pid" => 0
"son" => array:1 [▼
0 => array:4 [▼
"id" => 5
"name" => "父2-1"
"pid" => 2
"son" => []
]
]
]
]