用单个参数递归打印钻石

时间:2014-10-24 23:12:06

标签: c++ recursion

下面的代码做了我想要的,但我需要它,使得三角形函数只需要一个参数,即maxrow。我认为函数可能需要从maxrow倒计时直到它等于1,但是如何从钻石中间开始打印让我感到困惑。怎么可能呢?

#include <iostream>
#include <string>
void print_row(unsigned int cnt)
{
     while(cnt --> 0) std::cout << "* "; // or for loop, I just think --> is cute
     std::cout << '\n';
}

void triangle(int maxrow, int row = 0)
{
     if (row >= maxrow)
     {
         print_row(row);
     }
     else
     {
         std::cout << std::string(maxrow-row, ' ');
         print_row(row);

         triangle(maxrow, row+1);

         std::cout << std::string(maxrow-row, ' ');
         print_row(row);
     }
}

int main()
{
     std::cout << "Enter total lines: ";
     int x;
     std::cin >> x;
     std::cout << '\n';
     triangle(x);
}

1 个答案:

答案 0 :(得分:0)

创建一个辅助函数并调用它:

void triangle_helper(int maxrow) {
    triangle(maxrow, 0);
}

您可以进一步将triangle_helper重命名为triangle,将triangle重命名为triangle_impl,和/或将其放入某个私有命名空间。

Demo