C ++ Рекурсивная функция для печати линейки не работает. - PullRequest
0 голосов
/ 29 июля 2011

Я пытался научить себя 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);
}

Ответы [ 2 ]

6 голосов
/ 29 июля 2011

В вашей функции 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;
1 голос
/ 29 июля 2011

Я получил вывод, как показано на рис. Разве это не вы хотите? Снять точку с запятой в if ( level == 0)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...