2014-10-24 2 views
0

Следующий код делает то, что я хочу, но он мне нужен, так что функция треугольника принимает только один параметр - 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); 
} 

ответ

0

Создайте вспомогательную функцию и вызвать его:

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

Вы можете дополнительно переименовать triangle_helper в triangle и triangle к triangle_impl, например, и/или положить его в каком-то частном пространстве имен.

Demo