好的,我只是无法解决这个问题。我必须在输入两个字母的字符中打印出任何大小的三角形。例如:范围(c,j),它必须是递归的。我的代码中没有任何循环。输出应该如下所示:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
等等......所以,如果你注意到,它会向前打印,直到它到达最新的字母,然后向后打印。任何关于如何做到这一点的建议都非常感谢。
编辑:我不是想欺骗。我完全坚持如何处理这个,所以我要求提出建议,而不是有人给我整个程序的代码。感谢。答案 0 :(得分:0)
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;
}
答案 1 :(得分:-1)
这会对你有所帮助。 Try it here
#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;
}