1、核心思想:
基于二维数组,利用递归对数组进行相关赋值,最后打印输出。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
char triangle[2048][2048];
void draw(int depth,int posx,int posy){
if(depth==1){
triangle[posx][posy]='/';
triangle[posx+1][posy]='\\';
triangle[posx-1][posy+1]='/';
triangle[posx+2][posy+1]='\\';
triangle[posx][posy+1]='_';
triangle[posx+1][posy+1]='_';
}
else{
int side=pow(2,depth-1);
draw(depth-1,posx,posy);
draw(depth-1,posx-side,posy+side);
draw(depth-1,posx+side,posy+side);
}
}
void print(int depth,int posx,int posy){
int side =pow(2,depth);
for (int j = 1; j <=side; ++j){
for (int i = posx-side; i <= posx+side; ++i){
cout<<triangle[i][j];
}
cout<<endl;
}
}
int main() {
cout<<"这样的图腾大小为:";
int n;
cin>>n;
memset(triangle,' ',sizeof(triangle));
draw(n,1025,1);
print(n,1025,1);
return 0;
}
2、递归总结:
先把基础操作写出来,也就是分界条件depth==1,然后观察发现一个depth>1的谢尔夫斯基三角形是有3个起点的,所以这样就写好了一个递归。