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

posted @ 2015-08-02 08:56  SWordStudio  阅读(1024)  评论(0编辑  收藏  举报