。。本人底子较差。。。好不容易看懂了这个函数。。。贴代码和注释上来,欢迎大家来指点指点。
#include <iostream>
const int Len = 66;
const int Divs = 6;
void subdivide(char ar[], int low, int high, int level);
int main()
{
char ruler[Len];
int i;
for(i = 1;i < Len-2; i++)
ruler[i] = ' '; // 初始化数组
ruler[Len - 1] = '\0';
int max = Len - 2;
int min = 0;
ruler[min] = ruler[max] = '|'; // 字符串的第一个和最后一个字符为 |
std::cout << ruler << std::endl; // 输出的第一行
for (i = 1; i <= Divs; i++)
{
subdivide(ruler,min,max,i);
std::cout << ruler << std::endl;
for (int j = 1; j < Len - 2; j++)
ruler[j] = ' '; //清空数组
}
return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
// 当循环的第一次进来后,由于LEVEL是1,所以把中间的设为 | 就跳出,第二次进来后,由于LEVEL是2,所以,中间的设为 | 之后,再进入这个函数,把起始点到中间点之间的中间的元素设为 | ,然后跳出第一个的调用,跳入第二个递归,将后半部分的中间元素设为 | 。依次类推,得到完整的图。
if(level == 0)
return ;
int mid = (high + low) / 2;
ar[mid] = '|';
subdivide(ar, low ,mid ,level-1);
subdivide(ar, mid ,high , level-1);
}