使用递归C++打印等边三角形A-Z

Printing Equilateral Triangle A-Z Using Recursion C++

本文关键字:等边三角形 A-Z 打印 C++ 递归      更新时间:2023-10-16

好吧,我就是想不通这个问题。我必须用输入两个字母的字符打印出任意大小的三角形。例如:range(c,j),它必须是递归的。我的代码中不能有任何循环。输出应该是这样的:

         A
        ABA
       ABCBA
      ABCDCBA
     ABCDEDCBA
    ABCDEFEDCBA
   ABCDEFGFEDCBA

等等…所以,如果你注意到,它会向前打印,直到找到最新的字母,然后向后打印。任何关于如何做到这一点的建议都将不胜感激。

编辑:我不是想作弊。我完全被困在如何处理这个问题上,所以我在征求建议,而不是让别人给我整个程序的代码。谢谢

土豚的解决方案是最好的,但如果你想要一个只有一个功能的版本:

#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;
}

这将对您有所帮助。在这里试试。

#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;
}