在这个例子当中将使用递归来实现一个打印标尺刻度的方法。首先是递归,函数调用其本身就叫递归,在需要将一项工作不断分为两项较小的、类似的工作时,递归非常有用,递归的方法被称为分而治之策略。
下面是一个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)。这将不断导致函数调用数翻倍,如果要求的递归层次很多,这种递归方式将使一种糟糕的选择;递归调用适合用于递归层次较少的的情况。
原文链接: https://www.cnblogs.com/Leekin/p/4695099.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/220056
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!