Распечатать шаблон с использованием рекурсии C ++ - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь написать программу, которая, учитывая натуральное число n, печатает шаблон, который можно найти здесь .Пока что это хорошо работает только при n = 2. Я думаю, что моей самой большой проблемой является распознавание, когда рекурсивная функция должна вызывать себя.Код:

void print_line(int n) { // draw a line with n asterisks
    if (n == 0) return;
    for (int i = n; i > 0; i--) {
        cout << "*";
    }
    cout << endl;
}

void print_bars(int n) { // draw the pattern
    if (n == 0) return;
    print_line(n);
    print_bars(n - 1);
    for (int i = n - 1; i > 0; i--) {
        print_bars(i);
    }
}

Я бы предпочел подсказки, а не прямой ответ.Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Проблема заключалась в том, что я не учел должным образом, каков был настоящий паттерн.Вместо этого я попытался имитировать это, кодируя сразу ... Получившийся рабочий код:

void print_line(int n) { // draws a line with n asteriscs
    if (n == 0) return;
    cout << string(n, '*') << endl;
}

void print_bars(int n) { // draws the pattern
    if (n == 0) return;  
    print_line(n);
    print_bars(n - 1);
    print_bars(n - 1);
}
0 голосов
/ 12 октября 2018

Если я правильно понимаю упражнение (которое, на мой взгляд, представлено ужасно), вам следует переосмыслить свой алгоритм перед тем, как использовать его.Каждый шаг можно рассматривать как предыдущий шаг плюс кусок, который в данном случае находится наверху, делая все намного проще.Забудьте свой код и сначала решите его с абстрактной точки зрения.СОВЕТ: большая ошибка, которую вы сделали, соответствует разделу приращения вашего второго цикла.

Как только вы это сделали, перекодируйте его.Вы можете просто настроить одну / две строки кода, но, поскольку это учебное упражнение, я бы посоветовал вам использовать рекурсию, которая, кстати, обычно более эффективна.

...