我们的任务是编写一个可以打印如下内容的递归:
* * * *
* * *
* *
*
*
* *
* * *
* * * *
我编写了代码,希望获得正确的图形。但是,我得到了:
* * * *
*
* *
* * *
* * * *
我不知道为什么。我以为每次我的代码调用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';
}
}