使用递归 C++ 打印出模式

Print out pattern using recursion c++

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

比起直截了当的答案,我更喜欢提示。谢谢。

如果我对练习的理解正确(在我看来,练习的呈现方式很糟糕),您应该在编写实际代码之前重新考虑您的算法。每一步都可以看作是前一步加上一块,在本例中它位于顶部,使一切变得容易得多。忘记你的代码,先从抽象的角度解决它。提示:你犯的大错误对应于你第二个循环的增量部分。

完成后,重新编码。您可以简单地调整 one/two 行代码,但由于这是一个学习练习,我建议您使用递归,顺便说一下,递归通常效率更高。

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

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);
}