C++入门题

来源:百度知道 编辑:UC知道 时间:2024/09/28 07:43:52
#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)
{
if(level==0)
return;
int mid=(high+low)/2;
ar[mid]='|';
subdivide(ar,low,mid,level-1);
subdivide(ar,mid,high,level-1);
}
我想了很久都想不到这题的输出结果。。。请高手指导。。。最好给个QQ来。

这是一个递归的例子,也是一个二分法的例子。
void subdivide(char ar[],int low,int high,int level) 是一个二分函数,它执行完ar[mid]='|'; ,也就是说将数组中给这个二分函数的部分的中间的元素置为‘|’后,它继续将从左边到中间,从中间到右边这两组也进行一边相同操作。
这个程序我没有跑过,但是我认为它的运算结果应该是一大串“|||||||||”这样的东西。
而level这个数字在这个程序里控制二分的进行次数。注意if(level==0)
return; 也就是说当level=0它就不再进行了,打住了。
而如果level大于0的情况下,它所调用的下一级递归
subdivide(ar,low,mid,level-1);
subdivide(ar,mid,high,level-1);
注意这些的level变成了原来level减一。也就是说这个递归终将因为level成为0而结束。

你可以仔细看一下递归函数的定义来学。

希望对你有所帮助。

加我吧 249283506