zoukankan      html  css  js  c++  java
  • 用C++实现绘制标尺的方法,使用了递归

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

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

     1 #include <iostream>
     2 
     3 using namespace std;
     4 const int Len = 66;
     5 const int Divs = 6;
     6 void subdivide(char ar[], int low, int hight, int level);
     7 int main()
     8 {
     9     char ruler[Len];
    10     int i;
    11     for (i = 0; i < Len - 2; i++)
    12         ruler[i] = ' ';
    13     ruler[Len - 1] = '';
    14     int max = Len - 2;
    15     int min = 0;
    16     ruler[min] = ruler[max] = '|';
    17     cout << ruler << endl;
    18     for (i = 1; i <= Divs;i++)
    19     {
    20         subdivide(ruler, min, max, i);
    21         cout << ruler << endl;
    22         for (int j = 0; j < Len - 2; j++)
    23             ruler[j] = ' ';
    24     }
    25     
    26     return 0;
    27 };
    28 
    29 void subdivide(char ar[], int low, int hight, int level)
    30 {
    31     if (level == 0)
    32         return;
    33     int mid = (hight + low) / 2;
    34     ar[mid] = '|';
    35     //递归调用
    36     subdivide(ar, low, mid, level - 1);
    37     subdivide(ar, mid, hight, level - 1);
    38 }

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

  • 相关阅读:
    简单地通过Python库使用python的socket编程
    js 实现继承的几种方式
    JAVA中获取当前系统时间
    IntelliJ Idea 常用快捷键列表
    关于报错:There is already 'xxxController' bean method的解决方法
    mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)
    安装系统,用cmd进行分区
    Bootstrap关闭当前页
    bootstrap的日期选择器
    Bootstrap如何关闭弹窗
  • 原文地址:https://www.cnblogs.com/Leekin/p/4695099.html
Copyright © 2011-2022 走看看