`
peng5047
  • 浏览: 13803 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

使用递归求解排列组合问题

阅读更多

排列、组合我们都很熟悉,为了更好的分析问题,我们用A(n,m)表示从n个元素中取出m个元素的不同组合数,用C(n,m)表示从n个元素中取出m个元素的不同排列数。
根据排列组合的性质有如下公式成立:
1.A(n,m) = n!/m!
2.A(n,m) = m*A(n-1,m-1) + A(n-1,m)
3.C(n,m) = n!/(m!*(n-m)!)
4.C(n,m) = C(n-1,m) + C(n-1,m-1)

对于求排列组合数的问题,如果我们采用公式1和公式3,那么就会涉及求阶乘,而13的阶乘是6227020800,已经超出了32位机器中int,long(均为4字节)的表示范围,因此当需要求阶乘的数较大时公式1和公式3在编程中就不能使用了。这时我们可以考虑下公式2和公式4,这两个公式的特点是使用了递归,将问题的规模不断缩小,直到可以直接解决,因此在求排列组合问题时这两个公式是非常有效的。
下面给出求C(n,m)的C语言代码:

#include <stdio.h>

/*求解C(n,m)*/
int combination(int n,int m)
{
    if(m == 1)
        return n;
    else if(m == n)
        return 1;
    else
        return combination(n-1,m) + combination(n-1,m-1);
}

int main()
{   
    int n,m;
    printf("please input n,m:\n");
    scanf("%d %d",&n,&m);
    printf("C(%d,%d)=%d\n",n,m,combination(n,m));
    system("pause"); 
    return 0;
}

0
4
分享到:
评论

相关推荐

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

    递归求解几类排列组合问题,求组合数列的情况

    西南交大acm递归实例

    通过运用递归思想,求解几个关于排列组合的问题,仅供参考

    组合数学及其算法

    1.2 组合问题典型实例 1.2.1 分派问题 1. 2.2 染色问题 1.2.3 幻方问题 1.2.4 36军官问题 1.2.5 中国邮路问题 习 题 第二章 排列与组合 2.1 两个基本计数原理 2.2 无重集的排列与组合 2.3 重...

    ACM算法模板(吉林大学)

    Graph 图论 Network 网络流 Structure 数据结构 Number 数论 递归方法求解排列组合问题 模式串匹配问题总结 ACM/ICPC竞赛之STL

    MyLib(For ACM)

    关于图论、数据结构、网络流、树论、递归方法求解排列组合问题,以及ACM/ICPC之STL

    ACM算法实现代码库(复习算法必备)

    ACM算法实现代码,包括图论,网络流,数据结构,数论,递归方法求解排列组合问题,模式串匹配问题总结,计算几何,线段树及ACM/ICPC之STL介绍等主题,对参赛人员和找工作的同学都有很大的帮助(算法与数据结构方面)...

    问题描述:求从1~n的正整数中取出k(k<=n)个不重复整数的所有组合.pdf

    分析:求解k个数的不同组合,我们可以用一维数组a[0]~a[k-1]来保存其中的一个结果,因为组合元 素是不重复的,可以约定其递增排列,因为数组中的元素是递增排列的: 所以a[k-1]即组合中的最后一个数,只能为k~n 令i=...

    使用C语言解决字符串全排列问题

    这是典型的递归求解问题,递归算法有四个特性: 必须有可达到的终止条件,否则程序陷入死循环 子问题在规模上比原问题小 子问题可通过再次递归调用求解 子问题的解应能组合成整个问题的解 对于字符串的排列问题...

    算法设计与分析 王红梅

    3 .3 排序问题中的蛮力法 3 .3 .1 选择排序 3 .3 .2 起泡排序 3 .4 组合问题中的蛮力法 3 .4 .1 生成排列对象 3 .4 .2 生成子集 3 .4 .3 0 / 1 背包问题 3 .4 .4 任务分配问题 3 .5 图问题中的蛮力法 3 .5 .1 哈密顿...

    数据结构经典问题和算法分析

    能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小...

    数学建模方法:蚁群算法

    圆排列问题的蚁群模拟退火算法 智能混合优化策略及其在流水作业调度中的应用 蚁群算法在QoS网络路由中的应用 一种改进的自适应路由算法 基于蚁群算法的煤炭运输优化方法 基于蚁群智能和支持向量机的人脸性别分类...

    常用算法分析设计(分治、动态规划、分支限界、回溯、贪婪等等)

    详细介绍了常用的算法设计法,包括:分治、递归、动态规划、分支限界、回溯、贪婪、排列组合、图论算法等等

    计算机要学哪些东西----(还有附赠哦)

    4. 使用伪代码或程序设计语言实现、测试和调试求解简单问题的算法。 5. 描述调试中的实用策略。 PF3.基本的数据结构[核心] 主题: 原语类型 数组 记录 字符串和字符串处理 数据在内存中的表示 静态、栈和堆分配 ...

    常用算法代码

    递归方法求解排列组合问题 30 | 类循环排列 30 | 全排列 30 | 不重复排列 30 | 全组合 31 | 不重复组合 31 | 应用 31 模式串匹配问题总结 32 | 字符串 HASH 32 | KMP 匹配算法 O(M+N) 32 | KARP-RABIN ...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

    220个C语言程序源代码集合.zip

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

    200个经典C程序【源码】

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

    220个C语言程序源代码.zip

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

    200个C程序.rar

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字符数 038 同时显示两个文件的内容 039 简单...

Global site tag (gtag.js) - Google Analytics