递归题一

原创 2008年10月01日 16:47:00
 打印出已知字符串的所有排列组合,比如给出"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})


  1. template<class T>
  2. inline void Swap(T &a, T &b)
  3. {
  4.     T temp = a;
  5.     a = b;
  6.     b = temp;
  7. }
  8. template<class T>
  9. void Perm(T list[], int k, int m)
  10. {//生成list[k:m]的所有排列方式
  11.     int i;
  12.     if (k == m)
  13.     { //输出一种
  14.         for (i=0; i<=m; i++)
  15.         {
  16.             cout << list[i];
  17.         }
  18.         cout << endl;
  19.     }
  20.     else
  21.     {// 找出list[k:m]的所有排列方式
  22.         for (i=k; i<=m; i++)
  23.         {
  24.             //循环次数为m-k+1次
  25.             //只变k~m范围的元素,0~k-1作为前缀不变
  26.             Swap(list[k], list[i]);
  27.             Perm(list, k+1, m);
  28.             Swap(list[k], list[i]);
  29.         }
  30.     }
  31. }


java 递归 面试题

package math; public class RevertANumber {     /*      * 一列数的规则如下: 1、1、2、3、5、8、13、21、34.........
  • hlh522521
  • hlh522521
  • 2014年05月13日 14:39
  • 1308

简单递归入门题

帮助理解递归算法的一些入门级别题目合集
  • liujunyang0926
  • liujunyang0926
  • 2016年11月17日 20:50
  • 312

Java递归相关题目

指尖上的Java 2016-12-30 21:37 主页菌按时报到!主页菌由于明天公司要开会(不开僧),所以呢就提前分享几道关于递归的问题,同时也涉及到文件的一点知识!最后再给大家把前几天发...
  • u011277123
  • u011277123
  • 2017年01月03日 09:07
  • 241

递归系列之入门水题一

递归系列之入门水题一 对于递归我的感觉就是找到f(n)与前面f(n-1)等等的关系,最后拿出一个式子,这就是我理解的递归的方法,至于怎么找到关系列出式子就是难点了也就是怎么找递归方程了。 还有一点...
  • zw1996
  • zw1996
  • 2016年04月21日 21:05
  • 1287

刷刷笔试题~~[递归类编程]

1.[编程题]暗黑的字符串 一个只包含'A'、'B'和'C'的字符串,如果存在某一段长度为3的连续子串中恰好'A'、'B'和'C'各有一个,那么这个字符串就是纯净的,否则这个字符串就是暗黑的...
  • nanaMasuda
  • nanaMasuda
  • 2016年09月23日 13:19
  • 465

有关递归算法的面试题java实现

什么叫递归? 递归是方法(函数)调用方法本身的一种编程技巧; 使用递归需要满足2个条件:     1)有反复执行的过程(调用自身)     2)有跳出反复执行过程的条件(递归出口) 递归算法...
  • xuejingfu1
  • xuejingfu1
  • 2016年10月28日 13:19
  • 1748

递归整理及几个经典题目

递归+几个经典题目的解析
  • qq_34039315
  • qq_34039315
  • 2017年11月30日 19:50
  • 189

一个经典的递归算法题(实例+源码)

目的:动手做小程序 需求:这里有一组数:1、1、2、3、5、8、13、21、34、55......要求计算用这个递归算法,计算出这组数的第40个数是多少? 斐波纳契数列的定义:它的第一项和第二项均...
  • xifeijian
  • xifeijian
  • 2013年01月13日 18:43
  • 24181

poj_1664 递归

思路: 递归。条件:m:apple, n:plate 问题:func(m, n) 划分问题为若干个子问题:...
  • yeruby
  • yeruby
  • 2015年07月25日 22:04
  • 651

蓝桥杯-经典的递归问题(一)

珍惜作者劳动成果 转载请注明出处致谢蓝桥杯取球问题 问题描述: 在n个球中, 任意取出m个(不放回), 求有多少种不同的取法. 求解思路:   从题目上看, 这个问题对于递归来说似乎没有突破口...
  • u013144863
  • u013144863
  • 2016年09月02日 22:46
  • 1262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归题一
举报原因:
原因补充:

(最多只允许输入30个字)