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

时间:2014-10-23 19:31:46

标签: c++ recursion geometry pascals-triangle

好的,我只是无法解决这个问题。我必须在输入两个字母的字符中打印出任何大小的三角形。例如:范围(c,j),它必须是递归的。我的代码中没有任何循环。输出应该如下所示:

         A
        ABA
       ABCBA
      ABCDCBA
     ABCDEDCBA
    ABCDEFEDCBA
   ABCDEFGFEDCBA

等等......所以,如果你注意到,它会向前打印,直到它到达最新的字母,然后向后打印。任何关于如何做到这一点的建议都非常感谢。

编辑:我不是想欺骗。我完全坚持如何处理这个,所以我要求提出建议,而不是有人给我整个程序的代码。感谢。

2 个答案:

答案 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;
}