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‘)
时间: 2024-10-07 19:20:45

php 递归01 利用递归实现按字典顺序全排列的相关文章

记一次nodejs 爬虫(利用递归循环nightmare)

记一次nodejs 爬虫(利用递归循环nightmare) 新手,欢迎交流 目标网站 这里的网址很有规律,方便我们获取图书列表的url nightmare几个主要的api 具体参考:http://www.manongjc.com/detail/8-roxmpabfhewimht.html .goto(url,options) url:目标网站 options:伪造头部信息 .wait(callback[selector]) 这个方法会重复调用,直到 return true, 可以传入选择器,如:

利用递归 实现UIScrollView无限滚动的效果

项目需求 利用递归 实现UIScrollView无限滚动的效果. 上机试题, #import "ViewController.h" @interface ViewController (){ UIScrollView *mainScroll; BOOL isFinish; int x; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; x=0; isFinish = YES;

DevExpress TreeList利用递归绑定数据

private void TreeListBind(DataTable dt, int p) { treeList1.Nodes.Clear(); if (dt.Rows.Count < 1) return; DataView dv = new DataView(dt); dv.RowFilter = "ParentFieldName=" + p; if (dv.Count < 1) return; TreeListNode Node = treeList1.AppendN

利用递归求两个数字的最大公约数。

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //利用递归求两个数字的最大公约数. //公因数,如果一个整数同时是几个整数的约数,则这个整数为它们的"公约数" function getNum(a, b) { va

利用递归统一化函数参数的不固定数据类型

为了用户调用函数时更方便和灵活,所以我们定义的参数需要不固定数据类型,比如像这样: mylibs.on('event',fn); mylibs.on({    'event1':fn1,    'event2':fn2,    'event3':fn3}); mylibs.on('event1 event2 event3',fn); 这是一个自定义事件的例子,有三种传参的方式:1.事件名+回调   2.传递一个对象包含事件名和回调    3.多个事件名+一个回调 你觉得这个函数怎么写才好呢,也许

利用递归和动态规划来求解组合数

组合数定义:从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数. 下面是一种比较通俗的计算公式: 其递归公式为: c(n,m)=c(n-1,m-1)+c(n-1,m) 下面是c++实现该递归算法: #include <iostream> #include <stdlib.h> #define EXIT -1 using namespace st

利用递归把多维数组转为一维数组的函数

函数名称:array_multi2single 函数原形:array array_multi2single(array) 实现功能:把一个多维数组的数值存放到一维数组中,不保存Key. < ?php function array_multi2single($array) {     static $result_array=array();     foreach($array as $value)     {         if(is_array($value))         {    

递归01

00 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式). def Dec2bin(n): result = '' if n: result = Dec2bin(n//2) return result + str(n%2) else: return result 01 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中.举例:get_digits(12345) ==> [1, 2, 3, 4, 5] r

uni-app图片压缩转base64位 利用递归来实现多张图片压缩

//选择图片 chooseImage(){ let that =this uni.chooseImage({ sizeType: ['original','compressed'], //可以指定是原图还是压缩图,默认二者都有 count: 9,//默认9 success: (rem) => { console.log(rem) that.tempFilePaths = rem.tempFilePaths; //#ifdef MP-WEIXIN //图片压缩并转base64 that.weixi