例:找出n个自然数(1, 2, 3,..., n)中取r个数的组合,设计递归算法进行求解。例如,当n=5, r=3时,从大到小排列的组合数为:

5   4   3
   5   4   2
   5   4   1
   5   3   2
   5   3   1
   5   2   1
   4   3   2
   4   3   1
   4   2   1
   3   2   1

分析以上数据,组合规律如下:

(1)固定第一个数为5,则其后就是求解n=4, r=2的组合数;

(2)固定第一个数为4,则其后就是求解n=3, r=2的组合数;

(2)固定第一个数为3,则其后就是求解n=2, r=2的组合数。

一般地,递归算法的两个步骤为:

(1)n个数中r个数组合递推到“n-1 ”个数中r-1个数的组合,n-2个数中r-1个数的组合,... ,r-1个数中r-1个数的组合”,共有n-r+1次递归;

(2)递归的停止条件是r=1.

递归算法如下:

#include "stdio.h"
#define MAXN 100
int a[MAXN];

void comb(int m,int k)
{
 int i,j;
 for(i=m;i>=k;i--)
  {
  a[k]=i;
  if(k>1)
   comb(i-1,k-1);
  else
  {
   for(j=a[0];j>0;j--)
   printf("%4d",a[j]);
      printf("\n");
  }
  }

}

main()
{  int num;
    a[0]=3;
    comb(5,3);
    //printf("%d ",num);
   
}

n个自然数中取r个数的组合相关推荐

  1. 用回溯法找出n个自然数中取r个数的全排列

    回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯. 本实例是用回溯法输出n个自然数中以 ...

  2. 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)

    #include<stdio.h> int main() {int n,r;int i,j,k;int t=0;//输入1~n所有的r个数的组合,其中要求三个数不能相同,且后一位要大于前一 ...

  3. SWUSTOJ82编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。

    题目描述: 代码: #include <stdlib.h> #include<stdio.h> int _com(int x, int y) {     if (y >= ...

  4. 编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。

    编写一个递归算法,找出从自然数1,2,3,-,n中任取r个数的所有组合.例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321. 若设这n个自然数 ...

  5. n个自然数中取出r个数字的排列组合(python)实现

    '''找出n个自然数(1,2,3,4,...,n)取出r个数的组合 例: 当n=5时,r=3时,所有组合为: 1 2 3: 1 2 4: 1 2 5: 1 3 4: 1 3 5: 1 4 5: 2 3 ...

  6. ms 两个数组,从每个数组中取一个数相加,求最大的前k个和

    两个数组,从每个数组中取一个数相加,求最大的前k个和  比如:  数组A:1,2,3  数组B:4,5,6  则最大的前2个和:9,8.  ps:结果放到数组C[k]中 http://www.cnbl ...

  7. matlab 两个数中取小,matlab中取两个数中的较小值

    在EXCEL表中,如何取一组数据中的两个最大数和两个最小数?用什么函数? =large(a1:a15,1)第一大=large(a1:a15,2)第二大=small(a1:a15,1)第一小=small ...

  8. 从n个数中选出m个数的组合

    找出从自然数1,2,3,-,n中任取m个数的所有组合.例如:n=5,m=3时,所有组合为543,542,541,532,531,521,432,431,421,321. #include<ios ...

  9. N个数中选择M个数的组合(1MN)

    要求:利用递归算法求出N个数,并从1-N这N个数中,任意取M个数(1<M<N)的所有组合情况,用递归实现! #include<stdio.h> const int MAX = ...

最新文章

  1. Python核心资料:Django+Scrapy+Hadoop+数据挖掘+机器学习+精选视频(免费领)
  2. Win8 .NET Framework 3.5 离线安装
  3. WebRTC / Jitsi / 使用 jitsi 官方源安装内网演示环境过程
  4. windows10下的nc
  5. Maven Tomcat 部署
  6. LeetCode 1700. 无法吃午餐的学生数量(队列模拟 / 不模拟)
  7. 使用详解_Log4j2使用详解
  8. linux内核start_kernel分析
  9. 求 LCA 的三种方法
  10. airpods固件更新方法_AirPods 固件迎来大更新!这两个功能终于支持了
  11. 83. 验证码(1)
  12. 计算机里被删除的文件可以在哪里进行恢复,电脑怎么找回删除的文件?找回删除文件的方法...
  13. matplotlib 绘制图中图
  14. easyui Datagrid的deleteRow多行删除问题
  15. python连接网络摄像头安装图解_python 连接摄像头
  16. 基于Ubuntu14.04搭建caffe训练环境
  17. 算法系列之二十:计算中国农历(一)
  18. ensp——防火墙安全策略配置实验
  19. 使用ML.NET实现德州扑克牌型分类器
  20. 3Com发展史(摘录)

热门文章

  1. 1个ieee1394端口_IEEE 1394是什么?IEEE 1394接口是干吗用的?
  2. 隐形矫治“长坡厚雪”,时代天使当如何“滚雪球”?
  3. 【一本通评测 1373】【堆】【贪心】鱼塘钓鱼
  4. pytorch训练出现nan是什么意思
  5. 有关nano安装Arduino
  6. 上海交大关于“汉芯”系列芯片涉嫌造假的调查结论与处理意见的通报
  7. 无方向盘汽车、全球首个航天大模型、开物平台升级:百度世界AI成果展示
  8. 2018全球人工智能技术大会:AI做什么,才能惊艳到你?
  9. 单元测试工具——JUnit的使用
  10. 中软实训总结_中软实训心得