`
lxr215
  • 浏览: 60113 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

递归函数生成排列

 
阅读更多
  1. #include<iostream>
  2. using namespace std;
  3. template < class T>
  4. void perm(Ta[], int k, int m)
  5. { //生成a[k:m]的所有排列方式
  6. int i;
  7. if (k==m)
  8. { //输出一个排列方式
  9. for (i=0;i<=m;i++)
  10. cout<<a[i];
  11. cout<<endl;
  12. }
  13. else //a[k:m]有多个排列方式
  14. { //递归产生这些方式
  15. for (i=k;i<=m;i++)
  16. {
  17. Swap(a[k],a[i]);
  18. perm(a,k+1,m);
  19. Swap(a[k],a[i]);
  20. }
  21. }
  22. }
  23. template < class Ty>
  24. inline void Swap(Ty&a,Ty&b)
  25. {
  26. Tytemp=a;
  27. a=b;
  28. b=temp;
  29. }
  30. int main()
  31. {
  32. int a[]={1,2,3};
  33. perm(a,0,2);
  34. }

 

0
0
分享到:
评论

相关推荐

    易语言递归法取排列组合例程

    递归函数的调用会形成一个“树状”结构,其中每个节点代表一次函数调用,直到达到基本情况为止。 为了进一步理解这个例程,你需要打开提供的源码文件“递归法取排列组合易语言源码例程”,查看具体的代码实现。这将...

    递归算法实现随机串和全排列的生成

    递归函数会为每个位置选择一个随机字符,并在所有位置都被填充后停止。 全排列是另一个经典的计算机科学问题,它涉及找到一个序列的所有可能排列。对于给定的元素集合,递归是一个理想的解决方案。算法通常从第一个...

    案例排列组合(递归)

    在编写递归函数时,需要注意几个关键点: - 基本情况:确定何时停止递归,通常是最简单的情况,如上面提到的排列和组合的边界条件。 - 递归步骤:定义如何从当前问题缩小到更小规模的相同问题。 - 结合结果:将每次...

    可以节省(n-1)!次递归的排列生成工具类(java)

    因此,了解如何高效地生成排列具有重要的实际意义。 综上所述,该文件介绍了一种优化的排列生成算法,通过减少递归调用次数来提高效率。这种算法不仅涉及到了Java编程语言的基础知识,还涵盖了算法设计、数据结构...

    递归求解几类排列组合问题

    如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法。递归算法必须要设计好一个或若干个确定的递归终止条件。 在排列组合问题中,递归法可以用来解决深度很深或深度...

    递归求全排列.rar 递归求全排列.rar

    这段代码首先定义了一个名为`permute`的递归函数,接受一个数据列表、起始索引`i`和列表长度`length`。如果索引等于长度,意味着所有元素都被排列过,此时打印排列结果。否则,遍历未排列的部分,将一个元素与当前...

    算法分析与设计中的全排列问题

    该算法使用了递归函数perm,该函数将列表list中的元素交换,以生成所有可能的排列组合。 首先,我们需要了解什么是全排列问题。全排列问题是指给定n个元素,生成所有可能的排列组合的过程。例如,给定元素{a,b,c},...

    组合数学中的生成排列算法java代码

    生成排列的算法通常采用回溯法或者递归策略。在这种Java程序中,可能会使用深度优先搜索(DFS)来实现。DFS是一种用于遍历或搜索树或图的算法,它沿着树的深度,从根节点开始,逐层向下直至叶子节点,然后回溯到上一...

    基于C实现的按照字典序生成排列的算法(字典序)

    本篇将深入探讨如何使用C语言实现一个按照字典序生成排列的算法。 首先,我们需要了解全排列的概念。全排列是指从n个不同元素中取出m个元素(m≤n),按照一定的顺序排列起来,所有的排列方式的总数称为排列的阶乘...

    二叉树的生成以及非递归遍历C++实现

    ### 二叉树的生成及非递归遍历C++实现 #### 一、二叉树的基本概念 在深入探讨二叉树的生成与非递归遍历之前,我们先来了解一下二叉树的基本概念。 - **二叉树定义**:二叉树是一种树形结构,其中每个节点最多有两...

    消除左递归

    消除左递归是编译原理中的一项重要技术,旨在消除 Context-Free Grammar 中的左递归,生成等价的文法。 一、什么是左递归 左递归是指在 Context-Free Grammar 中,一条产生式的左部非终结符出现在右部的开头位置...

    java m取n 重复 不重复 排列组合 for循环嵌套递归

    - **递归**:利用递归函数可以方便地处理嵌套问题,适合解决这类组合问题。 #### 三、具体实现 ##### 3.1 不重复排列组合 ```java // 不重复排列组合 public static int loop(int start, int end, char[] chs, ...

    基于c语言的排列组合算法

    2. 递归函数:定义递归生成排列或组合的主函数。 3. 回溯逻辑:在递归过程中,当无法继续生成新的排列或组合时,回溯到上一层。 4. 循环和条件判断:控制元素的选择和回溯。 5. 输出或统计:根据需求,将生成的排列...

    全排序算法c++递归实现

    此函数是核心递归函数,根据参数`n`的值来递归生成所有可能的排列组合。 8. **辅助函数**:`void Aturn(int a[], int n, int k)`。此函数用于在递归过程中调整数组元素的位置,以确保生成新的排列。 9. **交换函数...

    数据结构实验-递归

    递归函数通常包含两个主要部分:基本情况(base case)和递归情况(recursive case)。对于全排列,基本情况通常是当序列只剩下一个元素时,此时只有一个可能的排列;而递归情况则是选择一个元素填入当前位置,然后...

    php实现的生成排列算法示例

    PHP实现的生成排列算法是基于递归和遍历字符串的思想,通过构建多个排列的递归函数来生成目标字符串的所有可能排列组合。排列是指从给定集合中取出所有元素,并以不同的顺序组成新的序列的过程。在编程领域,特别是...

    permutation.docx

    `Permutation`函数是一个递归函数,它接受两个参数:n(元素总数)和r(要选择的元素数量)。函数的核心逻辑在于递归地构建所有可能的排列组合。首先,我们来解析这个函数的工作原理: 1. **基本情况**:如果r为0,...

    基于c语言排列组合算法

    递归算法是指通过递归函数调用自己来生成所有可能的排列。下面是一个简单的递归算法实现: ```c void permute(int target[], int begin, int end) { if (begin == end) { printIntArray(target, end + 1); n++; ...

    递归九讲2021 7-9.zip

    通过定义基本情况(即最简单的排列)和递归步骤(将问题分解为更小的子问题),我们可以构建出递归函数来生成所有可能的排列。例如,经典的回溯法(Backtracking)就是一种常见的用于排列问题的递归策略。 1. **...

Global site tag (gtag.js) - Google Analytics