Не получается вывести симметричную ёлку
Используя рекурсию, необходимо вывести симметричную ёлку из N равнобедоенных блоков.
#include <stdio.h>
#include <iostream>
using namespace std;
/* nstars - сколько звездочек напечатать */
/* nspaces - сколько пробелов напечатать перед звездочками */
//функция, рисующая строку блока елки
void drawOneLine(int nspaces, int nstars)
{
int i; /* номер печатаемой звездочки, счетчик */
/* он же - номер печатаемого пробела */
for (i = 0; i < nspaces; i++)
putchar(' ');
for (i = 0; i < nstars; i++)
putchar('*');
putchar('\n');
}
/*
n (номер строки)
...* 1
..*** 2
.***** 3
******* 4
Всего строк: LINES
Число звездочек в n-ой строке: n*2 - 1
Число пробелов спереди: LINES - n
*/
//функция, рисующая один блок елки
void block_tree(int LINES, int n, int k)
{
int nline; /* номер строки */
for (nline = 1; nline <= LINES; nline++)
drawOneLine(LINES - nline +k, /* число пробелов --> nspaces */
nline * 2 - 1 /* число звездочек --> nstars */
);
}
// рекурсивная функция, рисующее елку
auto tree(int i, int n, int k)
{
k = 0;
if (i == n)
return '0';
else {
block_tree(i + 1, n, n-k);
k++;}
tree(i + 1, n, k);
}
int main()
{
int n;
cout << " n =";
cin >> n;
tree(1, n + 1, 0);
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Смещайте все треугольники на одинаковую величину:
//функция, рисующая один блок елки
void block_tree(int LINES, int offset)
{
for (int nline = 1; nline <= LINES; nline++)
drawOneLine(offset - nline, /* число пробелов --> nspaces */
nline * 2 - 1 /* число звездочек --> nstars */
);
}
// рекурсивная функция, рисующее елку
void tree(int i, int n, int offset)
{
if (i == n)
return;
else {
block_tree(i + 1, offset);
}
tree(i + 1, n, offset);
}
int main()
{
int n;
cout << " n =";
cin >> n;
tree(1, n + 1, n+2);
system("pause");
return 0;
}