【问题标题】:Print Opposite Triangles function in C++在 C++ 中打印对角三角形函数
【发布时间】:2020-10-03 15:37:33
【问题描述】:

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

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

我编写了代码并希望得到正确的图表。但相反,我得到了这个:

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

我不知道为什么。我认为每次我的代码调用 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;
    }
}

【问题讨论】:

  • 忘了说,我用 n = 4 尝试了我的代码。
  • 您是否尝试在调试器中运行您的程序并逐行执行您的代码?
  • 什么是printTriangle,如果有的话,它与printOpositeTriangles 有什么关系?你说“递归”,但 printOpositeTriangles 实际上并没有递归地调用自己。
  • @IgorTandetnik 好的,所以基本上在我的作业中,我应该编写一个名为 printTriangles 的递归函数和另一个名为 printOppositeTriangles 的递归函数,我打算再次调用 PrintOppositeTriangles 但这只是一个错字......所以基本上我花了半个小时,因为这个错字lololol而失败了。无论如何,非常感谢。现在问题解决了。
  • @regulus 你需要学习如何使用调试器。错字会发生,如果没有调试技能,您将无法找出问题所在。

标签: c++ c++11 recursion c++14


【解决方案1】:

您的代码中有一个大问题:您需要在 printOppositeTriangles 中进行递归调用。您正在调用与函数名称不同的 print triangle 作为 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';
    }
}

【讨论】:

  • 谢谢,我想通了。我本来打算调用函数本身,但不知怎的,这是一个错字。
  • 有没有办法可以将此问题标记为不再需要帮助?
猜你喜欢
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多