笛卡尔积

项目中用到了数据组合问题,使用递归实现笛卡尔积,发现报内存溢出,给出解决办法:

 1 function Descartes1(list){
 2       let resultList = [];
 3       let srcLength = list.length;
 4       for(let i = 1;i < srcLength; i ++){
 5         let preList = i==1 ? list[i-1]: resultList;
 6         let curList = list[i];
 7         let tempPreList = []
 8         for(let j = 0; j < preList.length; j++){
 9           for(let k = 0; k < curList.length; k++){
10             if(i == 1){
11              tempPreList.push([preList[j],curList[k]]);
12             }else{
13                 tempPreList.push([...preList[j],curList[k]]);
14             }
15           }
16         }
17         resultList = tempPreList;
18       }
19             console.log(resultList .length)
20             return resultList;
21     }

具体思路:

使用循环每个两个数组的数据做笛卡尔积,使用递归牵涉到递归层级和数据深度问题,容易报内存溢出,改为循环可解决

posted @ 2023-11-15 09:42  550  阅读(24)  评论(0编辑  收藏  举报