【递归】分形
题目描述
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
盒型分形定义如下:
度数为1的分形为:
X
度数为2的分形为:
X X
X
X X
如果用B(n-1)代表度数为n-1的盒型分形,则度数为n的盒型分形可以递归的定义为:
B(n-1) B(n-1)
B(n-1)
B(n-1) B(n-1)
你的任务是输出度数为n的盒型分形。
输入
输入包含多个测试数据,每个测试数据占一行,包含一个正整数n,(n<=7)。输入最后一行为-1,表示结束。
输出
对每个测试数据,用X表示输出的盒型,每个测试数据对应的输出结果后输出一串"----------",每行的末尾不要输出任何多余的空格,否则得到的是格式错误的结果。
样例输入
1
2
3
4
-1
样例输出
X ---------- X X X X X ---------- X X X X X X X X X X X X X X X X X X X X X X X X X ---------- X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ----------
1 #include <iostream> 2 #include <bits/stdc++.h> 3 using namespace std; 4 char mapp[800][800]; //记录图形 5 void solve(int n,int x,int y) 6 { 7 if(n==1) 8 { 9 mapp[x][y]='X'; 10 } 11 else 12 { 13 int sizee=pow(3.0,n-2); 14 solve(n-1,x,y); //递归 15 solve(n-1,x+sizee*2,y); 16 solve(n-1,x+sizee,y+sizee); 17 solve(n-1,x,y+sizee*2); 18 solve(n-1,x+sizee*2,y+sizee*2); 19 } 20 } 21 int main() 22 { 23 int n; 24 while(cin>>n) 25 { 26 if(n==-1) 27 break; 28 int m=pow(3.0,n-1); //m为图形大小 29 for(int i=0;i<m;i++) 30 { 31 for(int j=0;j<m;j++) 32 mapp[i][j]=' '; //初始化 33 } 34 for(int i=0;i<m;i++) 35 { 36 mapp[i][m]='\0'; 37 } 38 solve(n,0,0); 39 for(int i=0;i<m;i++) 40 { 41 for(int j=m-1;j>=0;j--) 42 { 43 if(mapp[i][j]=='X') //若为X则该行遍历结束 44 break; 45 else if(mapp[i][j]!='X') //若非X则赋为'\0' 46 mapp[i][j]='\0'; 47 } 48 } 49 for(int i=0;i<m;i++) 50 printf("%s\n",mapp[i]); 51 printf("----------\n"); 52 } 53 return 0; 54 }