我正在尝试编写一个给定自然数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);
    }
}

我希望提示比简单的答案更好。谢谢。

最佳答案

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

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

09-15 14:28