我这个可能会比较好理解一点
C++ 代码
#include <cstdio>
#include <iostream>
using namespace std;
int n;
string s[8][100005];
int len[8];
void cacl(int n) {
if(n == 1) {
s[n][n] += 'X';
len[n] = 1;
return;
}
cacl(n - 1);
int pre = len[n - 1];
len[n] = pre * 3;
for(int i = 1; i <= pre; i++) {
s[n][i] += s[n - 1][i];
for(int j = 1; j <= s[n - 1][1].length(); j++) {
s[n][i] += ' ';
}
s[n][i] += s[n - 1][i];
}
for(int i = pre + 1; i <= pre * 2; i++) {
for(int j = 1; j <= s[n - 1][1].length(); j++) {
s[n][i] += ' ';
}
s[n][i] += s[n - 1][i - pre];
for(int j = 1; j <= s[n - 1][1].length(); j++) {
s[n][i] += ' ';
}
}
for(int i = pre * 2 +1; i <= pre * 3; i++) {
s[n][i] += s[n - 1][i - pre * 2];
for(int j = 1; j <= s[n - 1][1].length(); j++) {
s[n][i] += ' ';
}
s[n][i] += s[n - 1][i - pre * 2];
}
}
int main() {
cacl(7);
while(cin >> n && n != -1) {
for(int i = 1; i <= len[n]; i++) {
cout << s[n][i] << endl;
}
cout << '-' << endl;
}
return 0;
}