啥?你不知道分形图是啥?看下面
图片选自(鸣谢):
http://www.matrix67.com/blog/archives/6231
/*
盒分形定义如下:
1度的盒分形为:
X
-
2度的盒分形为:
X X
X
X X
- 3度:
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
- 4度
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
-
如果B(n-1)表示n-1度的盒分形,则n度的盒分形递归定义如下:
B(n-1) B(n-1)
B(n-1)
B(n-1) B(n-1)
请画出n度的盒分形的图形
*/
/* 输出格式如上图,输入数字(度数)*/
代码: */
#include<stdio.h>
#include<math.h>
#include<stdio.h>
char map[777][777];
void DFS(int n,int x,int y) {
int length;
if(n == 1) {
map[x][y] = 'X';
return;
} //length是正方形的边长
length = pow(3.0,n-2);
DFS(n-1,x,y);
DFS(n-1,x,y+2*length);
DFS(n-1,x+length,y+length);
DFS(n-1,x+2*length,y);
DFS(n-1,x+2*length,y+2*length);
}
int main() {
int size,n,i,j;
while(scanf("%d",&n) && n !=-1) {
size = pow(3.0,n-1);
for(i = 0; i<size; i++)
for(j = 0; j<size; j++)
map[i][j] = ' ';
DFS(n,0,0);
for(i = 0; i<size; i++) {
for(j = 0; j<size; j++)
printf("%c",map[i][j]);
printf("\n");
}
printf("-\n");
}
return 0;
}
/*递归创建一个分形图,精髓都在递归里面,这个题的突破规律口是
这个图形的边长是有规律的 : length = pow(3.0 , n-1 )*/
/*曾出现编译错误,原因是pow(x,y)求 x 的 y 次方时候,x 必须是一个浮点数,所以是3.0.*/
//耗时 172ms,下面有一方法可以使时间降到 0 ms 哈哈
/*打印生成的分形图时候:采用下面的输出方法:每次输出一行:T() = 0 ms 哈哈*/ for(i=0;i<size;i++) map[i][size]='\0'; //设置每行字符串的结束符 for(i=0;i<size;i++) puts(map[i]); //每次输出一行 printf("-\n"); /*鸣谢http://blog.csdn.net/hackbuteer1/article/details/7321602提供思路,*/