实用的任选n算法

$arr = array(1,2,3,4,5,6)

需求从$arr中选出任意多个元素的所有组合

比如任选三,通常我们只需要用三个for循环,但是这并不能适合于所有情况,如果在要求得出所有任选四的所有组合,就必须再加四个for循环,如果再多呢?

适用于任选n的所有情况:

<?php

//核心:采用堆+递归的形式实现
function get_rx($target,$arr) { static $rzRzt = array(); $count = count($arr); $selfName = __FUNCTION__; global $n; if ($count<1) { return; } if ($count == 1) { array_push($target, array_pop($arr)); if (count($target) == $n) { array_push($rzRzt, $target); } } else { $last = array_pop($arr); $selfName($target, $arr); $selfName($target, array($last)); array_push($target, $last); $selfName($target, $arr); } return $rzRzt; } $n = 3;//任选的个数 $arr = array(1,2,3,4,5); $rzRzt = get_rx(array(),$arr); print_r($rzRzt);
原文地址:https://www.cnblogs.com/mtima/p/3125637.html