程序代码:
#include<iostream>//输入输出流 const int Len = 66;//声明一个常数Len const int Divs = 6;//声明一个常数Divs。 (用来规定分几次。) void subdivide(char ar[], int low, int high, int level);//声明一个子函数subdivide //这个程序就是一个普通的实验程序,纯粹是找不到事做了。其目地是为了可以将一个一个长度一直分它的1/2,使它变成很多短的单位长度的组合。 int main() { using namespace std;//声明函数空间 char ruler[Len];//定义一个ruler数组 int i;//声明一个变量i for ( i = 1; i < Len-2; i++)//用一个for循环给入ruler数组除首尾两元素以外附上一个空格字符,首尾用来存放‘|’ ruler[i] = ' ';//程序乱码大概出在这,但是我不知道怎么改 ruler[Len - 1] = '\n';//在数组的最后一个元素加上一个换行符。 int max = Len - 2; int min = 0;//和上面函数共同规定了一个长度,最大最小 ruler[min] = ruler[max] = '|';//把‘|’付给最大最小两个元素 cout << ruler << endl;//输出流,输出这个数组其应该显示“| |”这样的一个图形 for ( i = 1; i <Divs; i++)//本程序的一个重点 { subdivide(ruler, min, max, i);//调用子函数。(根据数据结构,你该去看一下子函数了。) cout << ruler << endl;//显示处理完的数组数组。 for (int j = 1; j <Len - 2; j++)//再一个for循环清零数组。其纯在的意义就是消灭那些乱码,然而并内有什么卵用。 { ruler[j] = ' ';//或许是这出错了。 } } cin.get();//接受一个任意数结束程序。 return 0; } void subdivide(char ar[], int low, int high, int level) { if (level == 0)//当i值等于一时,下面函数调用自己时每次-1,当等于0时结束递归循环。 return; int mid = (high + low) / 2;//取中点。 ar[mid] = '|';//把中点这个元素付成‘|’,从而用‘|’把这个单位长度分成两个 subdivide(ar, low, mid, level-1);//把分出来的左边执行一样的函数。由于每次调用都会再次调用到这个部分,所以达到了递归的目的。 subdivide(ar, mid, high, level - 1);//把右边分出来。 }