使用递归C ++打印出图案

时间:2018-10-12 10:23:50

标签: c++ recursion draw cout

我正在尝试编写一个给定自然数n的程序,该程序打印出可以找到的here模式。到目前为止,它仅适用于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 :(得分:2)

如果我正确地理解了该练习(以我认为的可怕方式提出),则应该在实际代码之前重新考虑算法。每一步都可以看作是上一步,再加上一块,在这种情况下,它位于最上面,这使一切变得容易得多。首先,忘记代码并从抽象的角度解决它。提示:您犯的大错误对应于第二个循环的增量部分。

完成后,请重新编码。您可以只调整一两行代码,但是由于这是一项学习练习,因此我建议您使用递归,这通常会更有效。

答案 1 :(得分:2)

问题是我没有正确考虑实际模式是什么。相反,我试图通过立即编码来模仿它。 产生的有效代码:

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);
}
相关问题