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)。这将不断导致函数调用数翻倍,如果要求的递归层次很多,这种递归方式将使一种糟糕的选择;递归调用适合用于递归层次较少的的情况。

  • 相关阅读:
    重写不受限制
    类的向上转型(安全)向下转型(不安全)
    类的继承之构造函数和析构函数的顺序
    父类和子类的截断现象
    派生类重写方法
    运算符重载总结(大全)
    运算符重载方法3
    运算符重载方法2
    Shell基础编程
    TCP Wrappers(简单防火墙)---限制IP登录ssh
  • 原文地址:https://www.cnblogs.com/Leekin/p/4695099.html
Copyright © 2011-2022 走看看