递归算法思想就是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

从模型上来思考的话就需要解决两个要素:递推关系和递推边界。

问题:

数的组合问题,从n个数中选出m个数,结果按照字典序排列。

思路:

每个数的选择都有可能,假设第一个选择的是第i(i从0开始)个数,则剩下的就从i+1到length-1中选择。显然递推的关系很明显。边界也很清楚。

如果熟悉数组操作,应该不难。

参考代码如下:

#include "stdio.h"
#include<iostream>
using namespace std;#define MAX 100void combine(int a[], int n, int m, int b[], int M);int main(void)
{int i,n,m;int a[MAX], b[MAX];cout<<"Hell NOIP!"<<endl;cout<<"please enter n:"<<endl;cin>>n;cout<<"please enter m:"<<endl;cin>>m;if(n<m){cout<<"warning n must more than m!";return;}//初始化a数组for (i = 1; i < 100; i++){a[i - 1] = i;}combine(a, n, 3, m, 3);
}void combine(int a[], int n, int m, int b[], int M)
{int i, j;for (i = n; i >= m; i--){b[m - 1] = i - 1;if (m > 1)combine(a, i - 1, m - 1, b, M);  // 递归关系else                               //递归边界{for (j =0; j <= M-1; j++)cout<<a[b[j]]<<" ";cout<<endl;}}
}


附注:递归算法的理解和运用是学习DFS等搜索算法的基础,通过一些典型的例子加以训练,相信不难掌握。

算法解读--递归(二)相关推荐

  1. 算法解读 ---- 递归(一)

    算法解读 ---- 递归(一) 算法的最重要的是算法设计的模型,以及该模型背后的设计思想. 定义: 递归从编程的角度上理解:递归就是一个过程或者函数在其定义中直接或间接调用自身的一种方法. 递归是一种 ...

  2. 数据结构与算法Java(二)——字符串、矩阵压缩、递归、动态规划

    不定期补充.修正.更新:欢迎大家讨论和指正 本文以数据结构(C语言版)第三版 李云清 杨庆红编著为主要参考资料,用Java来实现 数据结构与算法Java(一)--线性表 数据结构与算法Java(二)- ...

  3. 索骥馆-编程语言之《程序语言的奥妙:算法解读(四色全彩)》扫描版[PDF]

    内容简介: 在我们生活的世界中,各种各样形形色色的事物和现象,其中都必定包含着科学的成分.在这些成分中,有些是你所熟知的,有些是你未知的,有些是你还一知半解的.面对未知的世界,好奇的你是不是有很多疑惑 ...

  4. 算法之递归(3)- 链表操作

    算法之递归(3)- 链表操作 递归(2)尝试了一个单链表的遍历,同时又分析了如何添加自己的操作,是在递归调用之前,还是在递归调用之后. 今天,打算将问题深入一下,即添加相应的操作在递归的过程中. (免 ...

  5. HNSW算法原理(二)之删除结点

    原文:https://blog.csdn.net/CHIERYU/article/details/86647014 HNSW算法原理(二)之删除结点 本篇文章继之前的一篇文章 HNSW算法原理(一)  ...

  6. 精通八大排序算法系列:二、堆排序算法

    精通八大排序算法系列:二.堆排序算法 作者:July .二零一一年二月二十日 本文参考:Introduction To Algorithms,second edition. ------------- ...

  7. Java入门算法(递归篇)丨蓄力计划

    本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...

  8. Jsoup代码解读之二-DOM相关对象

    转载自  Jsoup代码解读之二-DOM相关对象 之前在文章中说到,Jsoup使用了一套自己的DOM对象体系,和Java XML API互不兼容.这样做的好处是从XML的API里解脱出来,使得代码精炼 ...

  9. java算法的递归问题设计_java算法-递归算法思想

    递归算法是跟常见的算法思想.使用递归算法,往往可以简化代码编写,提高程序的可读性.但是,不适合的递归往往导致程序的执行效率变低. 一.递归算法基本思想 递归算法即在程序中不断反复调用自身来叨叨求解问题 ...

最新文章

  1. php 字符串数组转数组对象_php怎么将数组转成对象?
  2. facebook 直播_什么时候是在Facebook Live上直播的最佳时间? 我分析了5,000个Facebook帖子以找出答案。...
  3. 正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码
  4. 不间断电源ups标准_UPS不间断电源正确使用方法
  5. java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用
  6. Copy-On-Write容器之一:CopyOnWriteArrayList
  7. 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别
  8. Linux安装nextcloud教程,WSL下安装nextcloud
  9. easyui tree复选框是否打钩状态_原创深度:如何利用OpenVINO工具套件监控机器操作员情绪状态(一)...
  10. 无锡硕放机场建议改名为金苏机场
  11. 计算机硬件相关专业学校,计算机硬件相关专业有哪些
  12. 有关php的外国参考文献,php论文英文参考文献
  13. wordpress创建_如何在WordPress中创建专业的在线简历
  14. Qt获取当前控件所在窗口的位置(坐标)
  15. 成都拓嘉启远:拼多多开店怎样节约物流成本
  16. BigDecimal用法之计算等额本金和等额本息
  17. 【FPGA】实战之创建项目
  18. 模糊 C 均值聚类(Fuzzy C-Means)
  19. 深入浅出地讲解麦克斯韦方程组
  20. 11.18XML与JSON的简介

热门文章

  1. matlab字符处理
  2. Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'
  3. matlab中利用princomp实现PCA降维
  4. DPM(Deformable Parts Models)-----目标检测算法理解
  5. [云炬ThinkPython阅读笔记]3.3 构建
  6. 东华之旅vs第一次坐飞机经历2018-06-10
  7. 在asp.net中使用 log4net 笔记
  8. BUUCTF-WEB:[极客大挑战 2019]EasySQL 1(收藏了URL编码表)
  9. pip install -r requirement.txt 后 提示No such file or directory: ‘requirements.txt‘
  10. android 始终显示overflow菜单