`
vanillalyx
  • 浏览: 64604 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

设计一个递归算法,给出在n个元素{1,2,…,n}中,任选m个元素的排列(m<n)。

    博客分类:
阅读更多
普通排列问题:设计一个递归算法,给出在n个元素{1,2,…,n}中,任选m个元素的排列(m<n)。
另一种思路:引入一个标志数组se,记录n个元素中是否参加排列的情况。

void perm (int list[], int i,int k)   
{    for (int j=1; j<=n; j++) 
         if (!se[j]) {
               se[j]=1;
               if (i<m) 
                     perm (list, i+1,k+1);
               else
                     out (list);
               se[j]=0;
         }
}

perm (list, 1,1);


设已有i-1个数参加排列,perm (list, i)生成由第i个位置开始的以后的m-i+1个位置上的各种排列。
分享到:
评论

相关推荐

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

    在上述代码中,我们可以看到一个递归算法的实现,该算法可以生成n个元素的全排列。该算法使用了递归函数perm,该函数将列表list中的元素交换,以生成所有可能的排列组合。 首先,我们需要了解什么是全排列问题。...

    算法分析 递归算法 n个数据的排列数

    否则,对于 `k` 到 `n-1` 的每一个位置 `i`,交换 `a[k]` 和 `a[i]`,然后对 `k+1` 到 `n` 的子数组进行递归调用,最后恢复原顺序,以确保所有可能的排列都被考虑。 在 `main` 函数中,用户被要求输入数组的大小和...

    N选M的所有组合(递归与非递归实现)

    4. 对于每个未选择的元素(从当前索引到N-1),将其添加到选择集合,并递归调用函数,传入更新后的选择集合和下一个未选择元素的索引。 5. 在递归返回时,将当前元素从选择集合中移除,回溯到上一步。 非递归方法,...

    Permutation with Repetition R={ r1,r2,… ,rn }是要进行排列的n 个元素。其中元素r1,r2,… ,rn可能相同。试设计一个算法,列出R的所有不同排列。

    本问题是关于如何设计一个算法来求解具有重复元素的集合的所有不同排列组合。具体来说,给定一个包含`n`个元素的集合`R={r1,r2,… ,rn}`,其中元素之间可能存在重复。目标是找出这个集合的所有不同的排列组合。 ###...

    算法设计与分析之递归算法

    在函数返回过程中,递归算法会将计算结果返回给调用者。 递归算法的设计方法 ------------------- 递归算法的设计方法可以分为三个步骤: 1. 将问题分解成多个相似的小问题 2. 设计递归出口 3. 编写递归算法 ...

    程序设计中递归算法

    ### 递归算法在程序设计中的应用 #### 一、递归的概念与本质 递归是一种重要的编程思想,在计算机科学和数学领域都有广泛的应用。它指的是一个过程或函数直接或间接地调用自身来解决问题的方法。递归的核心在于将...

    用递归算法编写求一个数组A中的最大元素

    ### 递归算法在求解数组最大值中的应用 #### 一、递归算法简介 递归算法是一种通过调用自身来解决问题的方法。它通常包括两个部分:基本情况(base case)与递归情况(recursive case)。对于求解数组中的最大值...

    N个数全排列的非递归算法

    在描述中提到了一个博客链接,虽然具体内容没有给出,但通常博主会详细解释如何用非递归的方式解决全排列问题。非递归算法通常采用迭代或回溯的方式来完成,这种方式相对于递归可能会更节省内存,因为递归深度过大...

    算法实习:分治算法求n个数的数组中找出第二个最大元素

    本文将探讨如何使用分治策略来解决一个特定的问题——在一个包含n个整数的数组中找到第二大的元素。 #### 分治算法原理 分治(Divide and Conquer)是一种重要的算法设计策略,它通过递归地将一个问题分解成两个或...

    算出从n个不同元素中取出m个元素(m≤n)的组合数——C语言代码

    在计算机科学中,组合是数学的一个重要概念,特别是在算法设计和数据分析中经常被用到。组合数,也称为二项式系数,表示从n个不同的元素中无序地选取m个元素的方法数。本篇文章将深入讲解如何用C语言计算组合数,并...

    5!递归算法和非递归算法

    对于递归算法而言,确定一个合适的终止条件至关重要,这是避免无限递归的关键。 ##### 递归步骤 递归步骤定义了如何将大问题转化为小问题的过程,并且最终会归结到基本情况。递归步骤需要精心设计以确保每一次递归...

    使用C++,请给出此题的递归算法及非递归算法。

    在这个版本中,我们初始化一个变量`result`为1,然后通过循环乘以从2到`n`的所有整数,最终得到阶乘的结果。这种方法不需要存储额外的调用栈,通常更有效率。 递归和非递归算法的选择取决于问题的特性、性能需求...

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

    在计算机科学中,排列组合是一个重要的概念,在很多算法设计中都会用到。比如密码学中的密钥生成、信息安全中的数据加密等场景都可能涉及到这一概念。在Java编程语言中,通过不同的控制结构如for循环、递归等可以...

    递归算法与循环算法的分析

    1. 递归算法的定义:在程序设计中,在调用一个函数的过程中又出现直接或间接调用其函数本身的现象。 2. 循环算法的定义:在程序设计中,一个功能的实现需要不断的变化,有穷的循环判断条件,符合条件就继续循环,不...

    递归算法习题

    在解决递归算法问题时,重要的是要确保每一步递归操作都能够简化问题规模,且最终能够达到一个递归终止条件。对于每个具体问题,都需要明确递归函数的参数和返回值,确保每次递归调用都是向终止条件靠近,避免产生...

    用递归算法实现两个整数最大公约数的计算

    在IT领域,尤其是在编程与算法设计中,递归算法是一种常用且强大的技术,它通过将问题分解成更小的子问题来求解复杂问题。在本文中,我们将深入探讨如何利用递归算法来计算两个整数的最大公约数(Greatest Common ...

    递归算法专题ppt

    1. **确定基本情况**:这是递归算法中最小的子问题,可以直接给出答案。 2. **定义递归规则**:如何将大问题分解为小问题,并通过这些小问题的解决方案组合成大问题的解决方案。 3. **分析递归深度**:递归调用的...

    递归算法实验

    - 对于n个元素,如果只剩下1个元素,则输出该元素,即为一个排列。 - 否则,对每个位置i,将第i个元素与剩余元素交换位置,然后对剩下的元素进行全排列。 3. **汉诺塔**: - 通过递归地移动(n-1)个圆盘到中间...

    acm递归算法总结竞赛

    在ACM(国际大学生程序设计竞赛)中,递归算法是一种常见的解决问题的方法,它通过函数自身调用自身来实现问题的解决。递归的核心在于找到基本情况(base case),即可以直接求解的问题,以及每次递归调用时问题规模...

Global site tag (gtag.js) - Google Analytics