我一直试图从一本书中教自己C ++。以下代码是一个问题,因为我无法弄清楚自己在做什么错。代码是本书中的一个示例,但不会带来相同的结果。
函数subdivide()应该使用分而治之的方法来在中点分割数组并打印字符'|'。在那里(给人一种尺子的错觉),随后在每个新行上打印中点。问题是,最终的印刷品仅包含字符“ |”在所有行的端点,中间没有字符打印。
我试图发布图片,但显然不能。
我将不胜感激。这是C ++代码:
//using recursion to subdivide a ruler
#include<iostream>
const int len=66;
const int div=6;
void subdivide(char ar[], int min,int max,int level);
int main()
{
using namespace std;
char ruler[len];
int i;
for(int i=1; i<(len-2); i++)
ruler[i]=' ';
ruler[len-1]='\0';
int min=0;
int max=len-2;
ruler[min]=ruler[max]='|';
cout<<ruler<<endl;
for(i=1;i<=div;i++){
subdivide(ruler, min, max, i);
cout<<ruler<<endl;
for(int j=1; j<len-2; j++)
ruler[j]=' ';
}
return 0;
}
void subdivide(char ar[],int low,int high,int level)
{
using namespace std;
if (level==0);
return;
int mid=(high+low)/2;
ar[mid]='|';
subdivide(ar, low, mid, level-1);
subdivide(ar, mid, high, level-1);
}
最佳答案
在subdivide
函数中,if后面有分号:
if (level==0);
return;
缩进是骗人的,您的代码实际在做什么
if (level==0); //does nothing
return; // always returns (before modifying the ruler)
更改为
if (level==0) //no semicolon here
return;
关于c++ - C++递归函数,用于打印不起作用的标尺。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6867349/