递归算法实践---实现排列组合
排列组合算法的实现
在进行电商的业务场景开发过程中,商品的属性需要使用到排列组合的算法去实现商品的sku属性
而对于排列组合算法可使用递归的方式解决:
//以$arr数组为例:
$arr = [['a','b','c'],['a','b'],['a','b','c','d','e']];
需将数组内的各个子数组里的值排列组合如aaa,aab,aac,aad,aae,aba
这样的返回值
递归需要满足的三个条件
- 一个问题的解可以分解为几个子问题的解
- 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
- 存在递归终止条件
可以将问题拆分为n-1个双重循环,如先将前两组数组遍历组合成aa,ab,ba,bb,ca,cb
,再将得到的数组与下一数组循环遍历就可得到最终排列组合的结果
实现代码如下:
$arr = [['a','b','c'],['a','b'],['a','b','c','d','e']];
function recursiveArray($arr,$i=0,$data=[]){
$j=$i+1;
if(count($arr)==1){
return $arr;
}else{
if($j>=count($arr)){
return $data;
}
$z=0;
foreach($arr[$i] as $k1=>$v1){
foreach($arr[$j] as $k2=>$v2){
$data[$z]=$v1.$v2;
$z++;
}
}
$i++;
return $this->recursiveArray($arr,$i,$data);
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接