递归题一
来源:互联网 发布:软件图 编辑:程序博客网 时间:2024/06/07 05:37
打印出已知字符串的所有排列组合,比如给出"abc",打印abc,acb,bac,bca,cab,cba.
所有可能个数是n!,n为字符串长度。
数学表达:
E={e1,e2,e3,...en}.表示字符串的集合,令Ei为移去ei后的集合,perm(X)表示集合X的所有元素排列。ei.perm(X)表示在perm(X)的基础上加前缀ei.
例如:E={a,b,c}, E1={b,c},perm(E1)={bc,cb}, e1.perm(E1)={abc,acb}
当n=1时,perm{E}={e},只有一种组合
当n>1时,perm{E}=e1.perm{e1}+e2.perm{e2}+...en.perm{en}
递归定义结束。
例子:
当n=3, E={a,b,c}
perm{E}=a.perm({b,c})+b.perm({a,c})+c.perm({a,b})
perm({b,c})=b.perm({c})+c.perm({b})=bc+cb
perm({a,c})=a.perm({c})+c.perm({a})=ac+ca
perm({a,b})=ab+ba
当n=4,E={a,b,c,d}
perm{E}=a.perm{b,c,d}+b.perm({a,c,d})+c.perm({a,b,d})+d.perm({a,b,c})
所有可能个数是n!,n为字符串长度。
数学表达:
E={e1,e2,e3,...en}.表示字符串的集合,令Ei为移去ei后的集合,perm(X)表示集合X的所有元素排列。ei.perm(X)表示在perm(X)的基础上加前缀ei.
例如:E={a,b,c}, E1={b,c},perm(E1)={bc,cb}, e1.perm(E1)={abc,acb}
当n=1时,perm{E}={e},只有一种组合
当n>1时,perm{E}=e1.perm{e1}+e2.perm{e2}+...en.perm{en}
递归定义结束。
例子:
当n=3, E={a,b,c}
perm{E}=a.perm({b,c})+b.perm({a,c})+c.perm({a,b})
perm({b,c})=b.perm({c})+c.perm({b})=bc+cb
perm({a,c})=a.perm({c})+c.perm({a})=ac+ca
perm({a,b})=ab+ba
当n=4,E={a,b,c,d}
perm{E}=a.perm{b,c,d}+b.perm({a,c,d})+c.perm({a,b,d})+d.perm({a,b,c})
- template<class T>
- inline void Swap(T &a, T &b)
- {
- T temp = a;
- a = b;
- b = temp;
- }
- template<class T>
- void Perm(T list[], int k, int m)
- {//生成list[k:m]的所有排列方式
- int i;
- if (k == m)
- { //输出一种
- for (i=0; i<=m; i++)
- {
- cout << list[i];
- }
- cout << endl;
- }
- else
- {// 找出list[k:m]的所有排列方式
- for (i=k; i<=m; i++)
- {
- //循环次数为m-k+1次
- //只变k~m范围的元素,0~k-1作为前缀不变
- Swap(list[k], list[i]);
- Perm(list, k+1, m);
- Swap(list[k], list[i]);
- }
- }
- }
- 递归题一
- 一题php递归
- 递归(一)
- 一.递归
- 递归一
- 每日一题 No.49 递归与非递归转换
- 一到递归??的js题
- 递归研究(一) 递归入门
- 递归函数汇总(一)
- 递归学习(一)
- 基础算法--递归(一)
- 算法一--递归
- 算法之递归(一)
- 递归思想(一)
- 笔记一:递归
- 递归练习一
- 递归(一)
- 递归调用(一)
- Dotnet_c#循环学习笔记_01_Panel控件
- JJ比赛斗地主记牌器
- [软件下载]MinGW 5.1.4联机安装文件
- [编译配置]用MinGW编译C语言的批处理
- 将自己的程序编译成Unicode版本
- 递归题一
- vb调用C#写的dll
- [软件下载]gvim 7.2 for windows
- [软件下载]Editplus 3.01.559迅雷下载
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- [软件下载]indent 2.2.9 for windows
- visual c++学习笔记(二)
- [软件下载]gdb 6.8 mingw
- eclipse快捷键