printOppositeTriangles

printOppositeTriangles

我们的任务是编写一个可以打印如下内容的递归:

* * * *
* * *
* *
*
*
* *
* * *
* * * *

我编写了代码,希望获得正确的图形。但是,我得到了:
* * * *
*
* *
* * *
* * * *

我不知道为什么。我以为每次我的代码调用printOppositeTriangles(n-1)时,在调用下一个printOppositeTriangles(n-1)之前,都需要遍历所有内容,包括for循环(带有j的循环)。有人可以告诉我为什么吗?谢谢!
void printOpositeTriangles(int n){
    using namespace std;
    if (n==1){
        cout<<"*"<<endl;
    } else {
        for (int j=1;j<=n;j++){
            cout<<"*";
        }
        cout<<endl;
        printTriangle(n-1);
        for (int i=1;i<=n;i++){
            cout<<"*";
        }
        cout<<endl;
    }
}

最佳答案

您的代码中存在一个大问题:您需要在printOppositeTriangles中进行递归调用。您正在调用功能名称不同的打印三角形
作为printOppositeTriangles。这是递归的主要思想,在您的示例中不存在。
试试这个

void printLine(unsigned int n)
{
    if (n == 1){
        std::cout << "*" << std::endl;
    }
    else{
        for (unsigned int j = 1; j <= n; j++){
            std::cout << "*";
        }
        std::cout << '\n';

        printLine(n - 1);

        for (unsigned int j = 1; j <= n; j++){
            std::cout << "*";
        }
        std::cout << '\n';
    }
}

09-26 16:04