在这个例子当中将使用递归来实现一个打印标尺刻度的方法。首先是递归,函数调用其本身就叫递归,在需要将一项工作不断分为两项较小的、类似的工作时,递归非常有用,递归的方法被称为分而治之策略。

下面是一个win32控制台程序的代码:

 #include <iostream>

 using namespace std;
const int Len = ;
const int Divs = ;
void subdivide(char ar[], int low, int hight, int level);
int main()
{
char ruler[Len];
int i;
for (i = ; i < Len - ; i++)
ruler[i] = ' ';
ruler[Len - ] = '\0';
int max = Len - ;
int min = ;
ruler[min] = ruler[max] = '|';
cout << ruler << endl;
for (i = ; i <= Divs;i++)
{
subdivide(ruler, min, max, i);
cout << ruler << endl;
for (int j = ; j < Len - ; j++)
ruler[j] = ' ';
} return ;
}; void subdivide(char ar[], int low, int hight, int level)
{
if (level == )
return;
int mid = (hight + low) / ;
ar[mid] = '|';
//递归调用
subdivide(ar, low, mid, level - );
subdivide(ar, mid, hight, level - );
}

这个程序清单中,subdivide()函数使用变量level来控制递归层。函数调用自身时,将把level减1,当level为零时,该函数将不再调用自己。subdivide函数调用自己两次,一次针对左半部分,另一次针对右半部分,调用的次数也将呈几何级数增长,也就是说,调用一次导致两个调用,然后导致四个调用,在导致八个调用,以此类推。这就是6层调用能填充64个元素的原因(2的6次方等于64)。这将不断导致函数调用数翻倍,如果要求的递归层次很多,这种递归方式将使一种糟糕的选择;递归调用适合用于递归层次较少的的情况。

用C++实现绘制标尺的方法,使用了递归的更多相关文章

  1. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

  2. Python解析Wav文件并绘制波形的方法

    资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...

  3. 【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

  4. 几何画板给word绘制图形的方法

    几何画板是一款专门用来绘图的工具,它里面有很多的绘图工具和功能菜单,都是专门为画图而设计的,比如一些理科的期刊杂志论文出版的时候,里面所涉及到的图形很多都是用几何画板画出来的.下面就根据几何画板教程来 ...

  5. Raphael绘制圆圈环绕方法

    $scope.toRadians = function (degrees) { return degrees * (Math.PI / 180); } $scope.toDegrees = funct ...

  6. canvas绘制清晰的方法

    很早就开始使用canvas,包括自己绘制各种图形,以及作为画布提供给诸如echarts,当canvas绘制细线条,特别是关于文字绘制会出现很模糊或者锯齿的感觉. <canvas ref=&quo ...

  7. createjs绘制扇形的方法

    扇形由三段线条组成,两条直线和一条弧线,直线可以用createjs中的lineTo函数画出,弧线用Graphics.arc函数来画. 一.关于createjs中的Graphics.Arc API Gr ...

  8. matlab绘制直方图的方法

    直接上代码,利用hist绘制频次直方图和频率直方图... %rand Fs=1000;N=10000; t=0:1/Fs:(N-1)/Fs; X1=rand(1,length(t)); subplot ...

  9. QPainter 提高绘制效率的方法

    原文: https://my.oschina.net/u/3919756/blog/1944747 如果我们用painter一个一个的绘制直线,圆等在控件上,绘制效率会不高.为了提高效率,我们可以设置 ...

随机推荐

  1. 黑马程序猿——Java中的类载入器

    ------- android培训.java培训.期待与您交流! -------- 类载入器 Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器,每一个类负责载入特定位置的类: BootS ...

  2. 03 将MDB文件在DATAGRID中显示

    附件:http://files.cnblogs.com/xe2011/MDB_BindingSource.rar using System; using System.Collections.Gene ...

  3. android 双卡手机发短信/判断手机是否为双卡

    通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...

  4. mybatis08

    Mybatis解决jdbc编程的问题 .数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置数据链接池,使用连接 ...

  5. mysql日期时间函数2

    win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而工作中有的时候每周是从周六开始算的,有些数据需要按周统计,那么那种方式比较好呢?   通过下面的研究 ...

  6. mac 神奇时光机

    http://bbs.zol.com.cn/nbbbs/d544_8216.html

  7. CentOS 6.7安装Java JDK

    1.下载Java JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  8. C# QRCode、DataMatrix和其他条形码的生成和解码软件

    今天制造了一个C#的软件,具体是用于生成二维码和条形码的,包括常用的QRCode.DataMatrix.Code128.EAN-8等等. 使用的第三方类库是Zxing.net和DataMatrix.n ...

  9. sql执行万条update语句优化

    几个月没有更新笔记了,最近遇到一个坑爹的问题,顺道记录一下.. 需求是这样的:一次性修改上万条数据库. 项目是用MVC+linq的. 本来想着用 直接where() 1 var latentCusto ...

  10. Android - Unable to execute dex: Multiple dex files define

    这种提示的意思是说,引用的文件重复了.在引用json解析库中,clean工程的时候,报错说: Unable to execute dex: Multiple dex files define Lorg ...