递归算法实践---实现排列组合

排列组合算法的实现

在进行电商的业务场景开发过程中,商品的属性需要使用到排列组合的算法去实现商品的sku属性

而对于排列组合算法可使用递归的方式解决:

//以$arr数组为例:
$arr = [['a','b','c'],['a','b'],['a','b','c','d','e']];

需将数组内的各个子数组里的值排列组合如aaa,aab,aac,aad,aae,aba这样的返回值

递归总结中

递归需要满足的三个条件

  1. 一个问题的解可以分解为几个子问题的解
  2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
  3. 存在递归终止条件

可以将问题拆分为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;
            }
            if(!$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);
            }else{
                $z=0;
                foreach($data as $k1=>$v1){
                    foreach($arr[$j] as $k2=>$v2){
                        $data[$z]=$v1.$v2;
                        $z++;
                    }
                }
                $i++;
                return $this->recursiveArray($arr,$i,$data);
            }
        }

    }

以上:bowtie:

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!