Печать равностороннего треугольника A-Z с использованием переполнения стека рекурсии

Хорошо, я просто не могу понять эту проблему. Я должен распечатать треугольник любого размера в символах, вводя две буквы. Пример: диапазон (c, j), и он должен быть рекурсивным. У меня не может быть никаких циклов в моем коде. Вывод должен выглядеть так:

         A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA

И так далее … Итак, если вы заметили, он печатает вперед, пока не доберется до самой новой буквы, а затем печатает назад. Любые предложения о том, как это сделать, с благодарностью.

РЕДАКТИРОВАТЬ: Я не пытаюсь обмануть. Я полностью застрял в том, как подойти к этому, поэтому я прошу предложения по этому вопросу, а не для того, чтобы кто-то дал мне код для всей программы. Благодарю.

-3

Решение

Решение aardvarkk является лучшим, но если вам нужна версия только с одной функцией:

#include <iostream>
using namespace std;void recursivePrintLettersTriangle (char start, char end, char current, int space, bool newLine) {
// Print spaces
if ((current + space) < end) {
std::cout << ' ';
recursivePrintLettersTriangle(start, end, current, space + 1, newLine);
// Print letters
} else if (start <= current) {
std::cout << start;

if (start < current) {
recursivePrintLettersTriangle(start + 1, end, current, space, false);
std::cout << start;
}

// Go to next line
if (newLine) {
std::cout << std::endl;

if (current < end) {
recursivePrintLettersTriangle(start, end, current + 1, 0, newLine);
}
}
}
}

void showLettersTriangle (char start, char end) {
recursivePrintLettersTriangle(start, end, start, 0, true);
}

int main() {
showLettersTriangle('a', 'g');

return 0;
}
0

Другие решения

Это поможет вам. Попробуй здесь.

#include <iostream>
using namespace std;

void spaces(char space) {
if (space <= 0) {
return;
}
std::cout << " ";
spaces(space-1);
}

void line(char start, char end, char space) {
if (start != end) {
std::cout << start;
line(start+1, end, space-1);
std::cout << start;
} else {
std::cout << end;
}
}

void countdown(char start, char end, char space) {
++space;
if (start != end) {
countdown(start, end-1, space);
}
spaces(space);
line(start, end, space);
spaces(space);
std::cout << std::endl;
}

void range(char start, char end) {
countdown(start, end, 0);
}

int main() {
range('a', 'g');
return 0;
}
-1

По вопросам рекламы [email protected]