php 递归01 利用递归实现按字典顺序全排列

最近对递归比较感兴趣,所以开始记录一些学习过程中的递归使用方法

1.全排列函数(arrange)有两个参数一个是,需要进行全排列的字符串(假设默认是按字典顺序排列),另一个则是积累的前缀如下图:

第一次默认是''

第二次,在for循环后分别代表1、2、3并作为下一次子递归的前缀参数

第三次,分别为12 13   21 23   31 32至此需要全排列的剩余字符串长度为一,利用echo进行输出与return结束递归

2.deal函数也有两个参数,分别是当前全排列的字符串,和去除附加在父前缀后剩下需要进行全排列的子字符串

 1 //有序数字字符串的全排列,如 123456
 2 //123
 3 //arrange[1,2,3] = 1.arrange[2,3] + 2.arrange[1,3] + 3.arrange[1,2]
 4 //1.arrange[2,3] = 12.arrange[3] + 13.arrange[2]
 5 function arrange($str,$prefix = '') {
 6     /*
 7      * if(!is_array($str)) {
 8      *     $str = str_split($str);
 9      * }
10      */ 
11     $str = str_split($str);
12     $len = count($str);
13     if($len === 1) {
14         echo $prefix.$str[0]."\n";
15         return;
16     }
17     for($i = 0; $i < $len; $i ++) {
18         $tmp = $prefix.$str[$i];
19         arrange(deal($str,$i), $tmp);
20     }
21 }
22 function deal($str, $index) {
23     unset($str[$index]);
24     return implode('',$str);
25 }
26 arrange('123')

 

转载于:https://www.cnblogs.com/LanceJL/p/6002514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值