C++用于打印标尺不起作用的递归函数.

Man*_*ill 0 c++ recursion function

我一直在努力从一本书中自学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);
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*oom 6

在你的subdivide函数中,if后面有一个分号:

if (level==0);
    return;
Run Code Online (Sandbox Code Playgroud)

缩进是骗人的,你的代码实际上在做什么

if (level==0);  //does nothing
return; // always returns (before modifying the ruler)
Run Code Online (Sandbox Code Playgroud)

将其更改为

if (level==0)    //no semicolon here
    return;
Run Code Online (Sandbox Code Playgroud)