加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Php递归获得字符串的所有可能性

发布时间:2020-12-13 16:33:28 所属栏目:PHP教程 来源:网络整理
导读:这是我的代码,以获得所有的可能性: $seq[1] = 'd';$seq[2] = 'f';$seq[3] = 'w';$seq[4] = 's';for($i = 1; $i 5; $i++){ $s['length_1'][] = $seq[$i]; $c1++; for($i2 = $i+1; $i2 5; $i2++) { $s['length_2'][] = $seq[$i].$seq[$i2]; $last = $seq[$i].
这是我的代码,以获得所有的可能性:
$seq[1] = 'd';
$seq[2] = 'f';
$seq[3] = 'w';
$seq[4] = 's';

for($i = 1; $i < 5; $i++)
{
    $s['length_1'][] = $seq[$i];
    $c1++;

    for($i2 = $i+1; $i2 < 5; $i2++)
    {
        $s['length_2'][] = $seq[$i].$seq[$i2]; 
        $last = $seq[$i].$seq[$i2]; 
        $c2++;

        for($i3 = $i2+1; $i3 < 5; $i3++)
        { 
            $s['length_3'][] = $last.$seq[$i3];
            $last = $last.$seq[$i3];    
            $c3++;

            for($i4 = $i3+1; $i4 < 5; $i4++)
            {
                $s['length_4'][] = $last.$seq[$i4];   
                $c4++;  
            }
        }
    }
}

for($i = 0; $i < $c1; $i++)
    echo $s['length_1'][$i].'<br>'; 

for($i = 0; $i < $c2; $i++)
    echo $s['length_2'][$i].'<br>';   

for($i = 0; $i < $c3; $i++)
    echo $s['length_3'][$i].'<br>';  

for($i = 0; $i < $c4; $i++)
    echo $s['length_4'][$i].'<br>';

但是如果我想添加更多,那么我将不得不添加一个循环.那么我怎么可以用递归呢?我试试看,但我真的不能这样做.
请帮助和发布示例尽可能简单.

谢谢.

这是一个简单的算法.从1到2count(数组)-1迭代.在每次迭代中,如果循环计数器的二进制表示中的第j位等于1,则包括组合中的第j个元素.

由于PHP需要能够将2count(数组)计算为整数,因此可能永远不会超过PHP_INT_MAX.在64位PHP安装上,您的数组不能有62个元素,因为262保持低于PHP_INT_MAX,而263超过它.

编辑:这将计算所有可能的组合,而不是排列(即’abc’=’cba’).它通过以二进制表示原始数组,并将“从上到下”从0转换为完整数组的二进制表示,从而有效构建每个可能的独特组合的列表.

$a = array('a','b','c','d');

$len  = count($a);
$list = array();

for($i = 1; $i < (1 << $len); $i++) {
    $c = '';
    for($j = 0; $j < $len; $j++)
        if($i & (1 << $j))
            $c .= $a[$j];
    $list[] = $c;
}

print_r($list);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读