a. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。

b. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。

void zuheRecursive ( int a[], int n, int m,  int b[], const int M )
{ for(int i=n; i>=m; i--)   // 注意这里的循环范围{b[m-1] = i - 1;if (m > 1)zuheRecursive(a,i-1,m-1,b,M);else                     // m == 1, 输出一个组合{   for(int j=M-1; j>=0; j--)cout << a[b[j]] << " ";cout << endl;}}
}

递归封装

class ZuheRecursive
{
public:typedef std::vector<std::vector<int> > TZuheResult;ZuheRecursive(int srcLen, int m){int * tmp = new int[m]();zuheRecursive(srcLen, m, tmp, m);delete [] tmp;}static void example(){int a[] = { 1, 2, 3, 4, 5 }; // 整数数组int m = 3; // 待取出组合的个数ZuheRecursive zuhe(5, m);printZuheResult(a, zuhe.m_zuheCalculation);}// 打印组合结果static void printZuheResult(int src[], TZuheResult zhr){for (auto it = zhr.begin(); it != zhr.end(); it++){for (auto itEle = it->begin(); itEle != it->end(); itEle++){cout << src[*itEle] << " ";}cout << std::endl;}}
public:TZuheResult m_zuheCalculation;
private:void zuheRecursive (int n, int m,  int tempArrayLenM[], const int M){ for(int i=n; i>=m; i--)   // 注意这里的循环范围{tempArrayLenM[m-1] = i - 1;if (m > 1)zuheRecursive(i-1,m-1,tempArrayLenM,M);else                     // m == 1, 输出一个组合{   std::vector<int> idxVector(tempArrayLenM, tempArrayLenM + M );m_zuheCalculation.push_back(idxVector);}}}
};

排列组合算法之三: 递归法相关推荐

  1. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  2. LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...

  3. js排列组合算法解决方案

    之前文章中谈过排列组合算法,主要事递归,代码如下 const arrangeCombination = arr => {const res = [], len = arr.length, inn ...

  4. js实现排列组合算法N选M

    JavaScript 从一个数组中拿出N个数(可放回),问共有多少种 今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下: function p(arr, N, ans){i ...

  5. php 组合算法,PHP简单排列组合算法示例分享

    本文主要和大家介绍了PHP实现的简单排列组合算法,结合具体应用实例分析了排列组合算法的实现与使用技巧,需要的朋友可以参考下,希望能帮助到大家. 一.问题: 给你一个40斤的西瓜,给3个人分,有多少种分 ...

  6. c语言排列组合的函数,c语言排列组合算法 排列和组合算法的实现方法_C语言经典案例...

    想了解排列和组合算法的实现方法_C语言经典案例的相关内容吗,在本文为您仔细讲解c语言排列组合算法的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:c语言排列组合算法,下面大家一起来学习吧. ...

  7. python 排列组合速度_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  8. 排列组合算法之二: 01转换法_java改变后的c++改进版

    http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...

  9. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

最新文章

  1. Python---哈夫曼树---Huffman Tree
  2. 使用Java打印字符串表格(中英文内容不乱)
  3. ▲教你如何轻易的做linux计划任务▲——小菜一碟
  4. 2018-2019-1 20189204《Linux内核原理与分析》第一周作业
  5. Github上被疯传的Redis实战文档也太香了
  6. 基于米思齐的电磁炮基础代码
  7. 嵌入式物联网系统软硬件基础知识大全
  8. pandas_计算前复权收盘价和后复权收盘价
  9. 【转】图片热点链接使用方法
  10. ubuntu-mysql的安装
  11. 深度技术GHOST WIN7 SP1 2013 新春版
  12. html标签的多级列表,Word小技巧1:利用多级列表功能实现章节标题自动编号
  13. 天圆地方放样软件_特大型天圆地方构件的放样制做方法及过程
  14. C语言趣味问题系列【1】 猜牌术
  15. 解决Python中出现的Memory Error的问题
  16. mac本如何在文件夹中打开终端
  17. JS+COOKIES实现健壮的购物车
  18. 酷狗音乐播放不了怎么解决?
  19. 信息学奥赛一本通-2059:【例3.11】买笔
  20. 【python | linux07】OS模块的用法及python换行符问题

热门文章

  1. 12_统计学习方法总结
  2. 秒懂文件路径 / 和 ./ 和 ../ 和 ../../
  3. ubuntu16.04 TLS安装java
  4. U盘安装CentOS Linux图文详解
  5. 记录一次linux病毒清除过程
  6. 员工的不幸?还是公司的悲哀?
  7. 一个人的命运决定于晚上8点到10点之间...
  8. linux下面实时查看进程,内存以及cpu使用情况使用命令
  9. MySQL--流程控制
  10. 18、led驱动程序的实现